Выбрать идентификаторы по условию - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Помогите пожалуйста справиться с одной проблемой. Есть две таблицы - company и company_contact. в первой хранятся имена компаний, во второй контактная информация. Выглядит это примерно так:
Листинг программы
  1. company
  2. -------------------------------------------
  3. id Name
  4. -------------------------------------------
  5. 1 McDonalds
  6. 2 Ernst And Young
  7. 3 Xerox
  8.  
  9. company_contact
  10. ------------------------------------------
  11. id company_id type value
  12. ------------------------------------------
  13. 1 1 address Sonne street 9
  14. 2 1 phone 09885-521-47
  15. 3 1 email removed@mail.ru
  16. 4 2 phone 0222147
  17. 5 3 phone 0985541
  18. 6 3 email removed@mail.ru
Задача стоит так. Нужно выбрать те компании, которые не имеют адреса. То есть в нашем случае Ernst And Young и Xerox. Если я делаю так:
Листинг программы
  1. SELECT *
  2. FROM company
  3. WHERE id IN (
  4. SELECT company_id
  5. FROM company_contact
  6. WHERE company_contact <> 'address'
  7. )
То в выборку попадают все компании. Ну в принципе понятно почему. Как решить проблему? Заранее спасибо!

Решение задачи: «Выбрать идентификаторы по условию»

textual
Листинг программы
  1. SELECT *
  2. FROM company
  3. WHERE id NOT IN
  4. (
  5.  SELECT company_id
  6.  FROM company_contact
  7.  WHERE company_contact = 'address'
  8. )

Объяснение кода листинга программы

  1. Код написан на SQL (Structured Query Language), который является стандартным языком запросов к реляционным базам данных.
  2. SELECT * FROM company - выбираются все поля из таблицы company.
  3. WHERE id NOT IN (SELECT company_id FROM company_contact WHERE company_contact = 'address') - выбираются только те строки из таблицы company, у которых значение идентификатора не входит в список идентификаторов из таблицы company_contact, где значение поля company_contact равно 'address'.
  4. В SQL-запросе используется синтаксис сравнения строк с помощью оператора =.
  5. Значение 'address' в скобках является константой (значением), которое сравнивается со значением поля company_contact в таблице company_contact.
  6. Результатом запроса будет набор данных, содержащий только идентификаторы (поле id) из таблицы company, которые не соответствуют условию, указанному в запросе.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.556 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут