带或不带结点的MySQL联结表查询

时间:2014-11-20 20:39:48

标签: php mysql pdo

所以我有一些主表和一个联结表,它将MySQL中的几个表连接在一起。第一个主要表格为contacts,第二个是addresses,第三个是categories。联结表为contact_address,使用contactsaddresses主键链接contact_idaddress_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'

只要水管工有地址,哪个工作正常,但是那些无家可归的水管工呢?他们在哪里?

1 个答案:

答案 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