我有3张桌子。
在这种情况下,我正在尝试从用户表中获取记录,并将emailaddress设置为它,如果它存在并且设置了正确的使用类型。如果联系行为空或未设置使用类型,则仍应返回结果,在这种情况下,emailaddress应为null。
表1
表2
表3
每当所有这些表中的记录都有完整链时,它就可以工作,但是当表2没有任何记录或表3没有正确引用Table2时,它什么也不返回。
我现在拥有的是:
SELECT
Table1.*,
Table2.value AS emailaddress
FROM
Table1
LEFT JOIN Table2
ON Table2.f_contact = Table1.f_contact
LEFT JOIN Table3
ON Table3.table2_id = Table2.id
WHERE Table1.f_contact = 1113
AND Table2.f_type = 2
AND Table3.f_type = 3
答案 0 :(得分:3)
将条件从where
子句移至ON
子句
SELECT
Table1.*,
Table2.value AS emailaddress
FROM
Table1
LEFT JOIN Table2
ON Table2.f_contact = Table1.f_contact AND Table1.f_contact = 1113
LEFT JOIN Table3
ON Table3.table2_id = Table2.id AND Table2.f_type = 2 AND Table3.f_type = 3
答案 1 :(得分:1)
在没有看到样本数据和所需输出的情况下很难分辨,但你可以这样尝试
SELECT
Table1.*,
CASE WHEN Table3.f_type IS NULL THEN NULL ELSE Table2.value END AS emailaddress
FROM
Table1
LEFT JOIN Table2
ON Table2.f_contact = Table1.f_contact
AND Table2.f_type = 2
LEFT JOIN Table3
ON Table3.table2_id = Table2.id
AND Table3.f_type = 3
WHERE Table1.f_contact = 1113
这是 SQLFiddle 演示