相关疑难解决方法(0)

T-SQL - 左外连接 - where子句与on子句中的过滤器

我试图比较两个表,以找到每个表中不在另一个表中的行.表1有一个groupby列,用于在表1中创建2组数据.

groupby     number
----------- -----------
1           1
1           2
2           1
2           2
2           4
Run Code Online (Sandbox Code Playgroud)

表2只有一列.

number
-----------
1
3
4
Run Code Online (Sandbox Code Playgroud)

因此,表1在组2中具有值1,2,4,而表2具有值1,3,4.

加入第2组时,我希望得到以下结果:

`Table 1 LEFT OUTER Join Table 2`
T1_Groupby  T1_Number   T2_Number
----------- ----------- -----------
2           2           NULL

`Table 2 LEFT OUTER Join Table 1`
T1_Groupby  T1_Number   T2_Number
----------- ----------- -----------
NULL        NULL        3
Run Code Online (Sandbox Code Playgroud)

我可以让它工作的唯一方法是,如果我为第一个连接放置一个where子句:

PRINT 'Table 1 LEFT OUTER Join Table 2, with WHERE clause'
select  table1.groupby as [T1_Groupby],
        table1.number as [T1_Number],
        table2.number as [T2_Number]
from    table1
        LEFT …
Run Code Online (Sandbox Code Playgroud)

sql left-join

6
推荐指数
2
解决办法
3万
查看次数

在内连接条件之前过滤表

这里有一个类似的问题,但我的疑问略有不同:

select *
from process a inner join subprocess b on a.id=b.id and a.field=true
and b.field=true
Run Code Online (Sandbox Code Playgroud)

那么,在使用 时inner join,哪个操作先出现:连接还是a.field=true条件?

由于这两个表非常大,我的目标是process首先过滤表,然后仅连接用 table 过滤的行subprocess

哪种方法是最好的?

sql join predicate inner-join where-clause

2
推荐指数
1
解决办法
9274
查看次数

标签 统计

sql ×2

inner-join ×1

join ×1

left-join ×1

predicate ×1

where-clause ×1