2014-11-20 48 views
0

所以我有一些主要表和一个联结表,它将MySQL中的几个表链接在一起。第一个主表是contacts,第二个是addresses,第三个是categories。联结表是contact_address,其使用它们的contact_idaddress_id主键链接contactsaddresses。我需要带或不属于一个名为plumber类地址可获取联系人...MySQL联结表查询有无联结

我目前得到这个:

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

您必须使用LEFT JOIN,而不是一个(内)的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返回左表中的所有行,并联接成功的右表中的行,或联接时没有的右表的所有NULL值。请看visual explanations of joins

+0

伟大的资源,链接 – DevDonkey 2014-11-20 20:58:23