在Join中将OR条件转换为另一个JOIN时缺少数据

时间:2015-03-11 18:41:58

标签: sql-server sql-server-2008 tsql join

几天前我问到如何将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。

请帮忙。

由于

2 个答案:

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