所以我有一些主表和一个联结表,它将MySQL中的几个表连接在一起。第一个主要表格为contacts
,第二个是addresses
,第三个是categories
。联结表为contact_address
,使用contacts
和addresses
主键链接contact_id
和address_id
。我需要使用属于或不包含属于plumber
...
我目前得到了这个:
SELECT
*
FROM
contacts T1
JOIN
contact_categories T2
USING
(contact_id)
JOIN
contact_address T3
USING
(contact_id)
JOIN
addresses T4
ON
T3.address_id = T4.address_id
WHERE
T2.general = 'Plumber'
只要水管工有地址,哪个工作正常,但是那些无家可归的水管工呢?他们在哪里?
答案 0 :(得分:1)
您必须使用LEFT JOIN而不是(INNER)JOIN:
SELECT
*
FROM
contacts T1 JOIN contact_categories T2
USING (contact_id)
LEFT JOIN
contact_address T3
USING (contact_id)
LEFT JOIN
addresses T4
ON T3.address_id = T4.address_id
WHERE
T2.general = 'Plumber'
INNER JOIN返回连接操作成功的所有行,LEFT JOIN返回LEFT表中的所有行,以及连接成功的右表中的行,或者连接时右表的所有NULL值不。请查看此visual explanations of joins。