几天前我问到如何将OR condtion(左连接)更改为另一个左连接。以下是代码:
SELECT *
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.ID = t2.ID
OR (
t1.col1 = t2.col1
AND t1.col2 = t2.col2
AND t1.col3 = t2.col3
AND t2.ID IS NULL
)
我转换为OR条件如下:
SELECT *
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.ID = t2.ID
LEFT JOIN Table2 t3
ON (
t1.col1 = t3.col1
AND t1.col2 = t3.col2
AND t1.col3 = t3.col3
AND t2.ID IS NULL
)
但是我没有获得第二个左边连接的记录。
OR条件结果如下:
T1.ID T2.ID
1 a
2 b
3 c
4 d
但是在第二个左边加入了它的下方:
T1.ID T2.ID
1 a
2 b
3 c
4rth记录来自第二个左连接。我如何在左连接中带来它。根据公司标准,我没有选择使用UNION ALl。
请帮忙。
由于
答案 0 :(得分:1)
首先请注意,您在第二个左连接中使用t2而不是t3:
SELECT *
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.ID = t2.ID
LEFT JOIN Table2 t3
ON (
t1.col1 = t3.col1
AND t1.col2 = t3.col2
AND t1.col3 = t3.col3
AND t3.ID IS NULL
)
无论如何,如果不了解你想做什么以及如何看待你的结果,很难回答你。
答案 1 :(得分:0)
您正在使用左连接,它只是为您提供左结果集中的所有内容。因为,您需要来自右边的t3的数据,根据您的要求,将第二个左连接更改为右连接或完全连接。以下查询之一可以为您提供正确的结果:
编辑14-03-2015
SELECT *
FROM Table1 t1
FULL OUTER JOIN Table2 t2
ON t1.ID = t2.ID
FULL OUTER JOIN Table2 t3
ON (
t1.col1 = t3.col1
AND t1.col2 = t3.col2
AND t1.col3 = t3.col3
AND t2.ID IS NULL
)