联接2个表的硬编码值

时间:2019-04-02 14:01:51

标签: sql sql-server tsql join

我不太了解“ join”的某些部分是如何工作的。

我有2个表需要在某些列上联接。

让我们说以下关系:

TabA ( IDA, IDB, Label, isActive)

TabB (IDB, INFORMATION)

我们在IDB上加入他们。但是,如果我们想加入isActive = 1会怎样?

会发生什么?

Select * 
  from TabA
  left join TabB 
    on TabA.IDB = TabB.IDB 
    and isActive = 1

我得到某种笛卡尔积,但是我不明白为什么也不是什么逻辑?

2 个答案:

答案 0 :(得分:0)

您可以联接两个表,它们具有相同的字段,例如这里您有IDB但isactive不属于两个表

您可以在where子句中使用isactive:

Select TabA.* from TabA
left join TabB 
on TabA.IDB = TabB.IDB 
where TabA.isactive = 1

答案 1 :(得分:0)

此查询是外部联接:

Select *
from TabA a left join
     TabB b
     on a.IDB = b.IDB and b.isactive = 1;

这遵循任何left join的相同规则。 TabA中的所有行都在结果集中。此外,还包括来自TabB的所有匹配项。在这种情况下,仅包含TabBisactive = 1的行。如果没有行,则所有匹配的列均为NULL。

例如,如果您的tabA为:

IDA     IDB
 1       1
 2       1
 3       2

tabB为:

IDB    isactive
 1         0
 2         1

那么结果集是:

IDA     IDB    IDB    isActive
 1       1     NULL      NULL
 2       1     NULL      NULL
 3       2      2        1
相关问题