Присоединиться, если существует в запросе MySQL - PullRequest
16 голосов
/ 08 июня 2011

У меня есть отчет, который экспортирует информацию для членов комитетов в таблицу Excel.

Вот мой запрос:

SELECT membership_organization.name AS Firm, 
membership_individual.first AS FirstName, 
membership_individual.middle AS MiddleName, 
membership_individual.last AS LastName, 
membership_individual.email AS Email, 
membership_individual.phone AS Phone, 
membership_location.addr1 AS Address1, 
membership_location.addr2 AS Address2, 
membership_location.city AS City, 
membership_location.state AS State, 
membership_location.zipcode AS Zip 
FROM membership_individual 
JOIN membership_organization ON membership_individual.org_name_id = membership_organization.id 
JOIN membership_location ON membership_individual.location_id = membership_location.id 
WHERE membership_individual.id IN ({list if ids}) 
ORDER BY LastName

Проблема в том, что некоторые члены неУ него нет идентификатора местоположения или он равен 0, поэтому эти члены не отображаются в отчете.

Есть ли способ определить местоположение JOIN?Если идентификатор местоположения членов существует, извлеките информацию, если не покажите мне доступную информацию.

Ответы [ 4 ]

30 голосов
/ 08 июня 2011

Измените оба ваших JOIN с на LEFT JOIN с.Вы получите все свои записи из members_individual, где соответствует предложение where, и значений NULL для других таблиц, в которых строки не совпадают.

4 голосов
/ 08 июня 2011

Используйте левое внешнее соединение:

SELECT membership_organization.name AS Firm, 
membership_individual.first AS FirstName, 
membership_individual.middle AS MiddleName, 
membership_individual.last AS LastName, 
membership_individual.email AS Email, 
membership_individual.phone AS Phone, 
membership_location.addr1 AS Address1, 
membership_location.addr2 AS Address2, 
membership_location.city AS City, 
membership_location.state AS State, 
membership_location.zipcode AS Zip 
FROM membership_individual 
JOIN membership_organization ON membership_individual.org_name_id = membership_organization.id 
LEFT OUTER JOIN membership_location ON membership_individual.location_id = membership_location.id 
WHERE membership_individual.id IN ({list if ids}) 
ORDER BY LastName
1 голос
/ 08 июня 2011

Используйте левое соединение, что означает, что ваш запрос станет

SELECT membership_organization.name AS Firm, 
membership_individual.first AS FirstName, 
membership_individual.middle AS MiddleName, 
membership_individual.last AS LastName, 
membership_individual.email AS Email, 
membership_individual.phone AS Phone, 
membership_location.addr1 AS Address1, 
membership_location.addr2 AS Address2, 
membership_location.city AS City, 
membership_location.state AS State, 
membership_location.zipcode AS Zip 
FROM membership_individual 
JOIN membership_organization ON membership_individual.org_name_id = membership_organization.id 
LEFT JOIN membership_location ON membership_individual.location_id = membership_location.id 
WHERE membership_individual.id IN ({list if ids}) 
ORDER BY LastName

, и вы получите данные для всех членов, даже тех, для которых нет строк в таблице местоположений.

0 голосов
/ 08 июня 2011

Попробуйте использовать

LEFT JOIN membership_location ON membership_individual.location_id = membership_location.id 

вместо вашего варианта ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...