完全加入&条件

时间:2017-07-27 06:51:50

标签: sql sql-server

presence

在上面的查询中,我想添加此select * from Table1 full join Table2 on Table2.Common = Table1.Common 条件:

where

where (Table1.StatusId > 100 or Table1.StatusId is not null) 的数据类型为StatusId

问题是,当我使用numeric(18, 2)条件时,whereTable2中没有任何连接数据的行不再显示。

还有其他方法可以添加此Table1条件吗?

5 个答案:

答案 0 :(得分:2)

尝试将其放在Subquery上。

SELECT  *
FROM    ( SELECT    *
          FROM      Table1
          WHERE     ( Table1.StatusId > 100
                      OR Table1.StatusId IS NOT NULL
                    )
        ) T
        FULL JOIN Table2 ON Table2.Common = t.Common

答案 1 :(得分:1)

t1.StatusId is NOT NULL过滤器移至ON条件

SELECT *
FROM   Table1 t1
       FULL JOIN Table2 t2
              ON t1.Common = t1.Common
                 AND t1.StatusId is NOT NULL

您的查询中的问题是,在table1状态列中,将显示非匹配记录NULL值,这些值将通过应用Where条件Where t1.StatusId is NOT NULL进行过滤。因此,将其移至ON子句,该子句告知要连接的记录是什么,而不是过滤结果

答案 2 :(得分:0)

您只需在ON-Statement

之后添加AND (Table1.StatusId > 100 or Table1.StatusId is not null)即可

答案 3 :(得分:0)

select *
from Table2
Full join Table1 on Table2.Common = Table1.Common
where (Table2.StatusId > 100 or Table2.StatusId is not null)

答案 4 :(得分:0)

如果要将where条件应用于连接条件的结果,则

  

选择*   来自表1   表2上的完全连接Table2.Common = Table1.Common其中Table1.StatusId> 100或Table1.StatusId不为空

由于你的条件(Table1.StatusId不为空),这个结果可能没有表2中没有来自Table1的连接数据的数据。

如果您希望仅对Table1的已过滤记录执行条件,则

  

从Table2中选择*完全连接(从Table1中选择*,其中StatusId> 100或StatusId不为空)T on Table2.Common = T.Common