Мне нужна помощь с MySQL-запросом.
Table Company:
(PK) ID_Company
CompanyName
...
Table Address:
(PK) ID_Address
(FK) ID_Company
Street
...
Table ContactPerson:
(PK) ID_ContactPerson
(PK) ID_Company
PersonName
...
Теперь я хочу создать оператор SELECT, чтобы получить список со всеми клиентами. Это должно выглядеть так:
ID_Company CompanyName Street PersonName
1 Google Test Joe
Но у компании не может быть ни одного, одного или нескольких адресов и контактных лиц. Я хочу выбрать только один адрес и одно контактное лицо в этом запросе. И это тот момент, когда я не знаю, как это сделать.
Я пробовал выбрать MIN для ID_Address, но это не работает, если у компании нет адреса и контактного лица.
Надеюсь, вы понимаете, что я пытаюсь сделать.
Спасибо за вашу помощь! :)
Добро пожаловать на сайт! На самом деле это не проблема SQL; это проблема архитектуры данных. Мы можем легко рассказать вам, как получить адрес ан и контактное лицо а для каждой компании, но только вы можете выбрать адрес который или контактное лицо, которое вам нужно. Если вам все равно, какой адрес или контактное лицо вы получите, обновите свой вопрос, указав это.
Начните с LEFT JOINs.
В этом суть: на самом деле не имеет значения, какой адрес выбран. Идеальным будет тот, который был создан первым (PK имеют auto_increment, поэтому в этом случае адрес / лицо с наименьшим PK)






Можно использовать left join и агрегацию:
select c.ID_Company, c.company_name, min(street), min(person_name)
from company c left join
address a
on c.ID_Company = a.ID_Company left join
ContactPerson cp
on cp.ID_Company = a.ID_Company
group by c.ID_Company, c.company_name;
Сначала спасибо за ответ. Но если я ВЫБИРАЮ a.ID_Company, что, если для этой компании нет адреса? PK для этой строки в ID_Company будет нулевым.
Я изменил этот запрос и заставил его работать. Намного проще, чем я думал! Большое спасибо за Вашу помощь! :)
@arahman. . . Я форматирую свой код точно так, как хочу. LEFT JOIN - оператор, соединяющий две таблицы. Я не начинаю строки с бинарных операторов. Все ключевые слова, выровненные по левому краю, начинают предложения SQL.
Как выбрать адрес или контактное лицо, если у компании их несколько?