【问题标题】:sql server joining table with null values with foreign key带有外键的带有空值的sql server连接表
【发布时间】:2015-03-04 08:28:40
【问题描述】:

我有 2 张桌子,如下所示。 Activity 和 UOM 表之间存在外键关系。

Activity Table
ActivityID    UOMID    ProcessNam
---------------------------------------
1             2         Process1
2             1         Process2
3             null      Process3

UOM Table
UOMId         UOMText
-------------------------
   1           UOM1
   2           UOM2

下面是我得到的查询和结果集

select a.ActivityID, u.UOMID, a.ProcessName, u.UOMText 
from Activity a
left join UOM u on a.UOMID = u.UOMId

ActivityID      UOMID       ProcessName     UOMText
1               2           Process1        UOM2
2               1           Process2        UOM1

是否有可能获得如下的额外行;来自 UOMID 为空的活动表

3               null        Process3        null

我尝试如下更改加入;但结果没有改变

left join UOM u on a.UOMID=u.UOMId or (a.UOMID is null or u.UOMId  is
null)

提前致谢

【问题讨论】:

  • 很奇怪,您的第一个查询应该会产生正确的结果。
  • 在两个表中都有一个名为 IsActive 的位类型列,在 where 子句中,我正在检查两个表的 IsActive 列是否为真。这会导致问题吗?
  • 你是唯一可以测试它的人。此外,具有 NULL UOM ID 的活动在逻辑上是不活动的。
  • @RohitShanbhag,就是这样。

标签: sql-server join foreign-keys


【解决方案1】:
select a.ActivityID, u.UOMID, a.ProcessNam, u.UOMText 
from Activity a 
left join UOM u on a.UOMID=u.UOMId

返回

ActivityID  UOMID   ProcessNam  UOMText
1           2       Process1    UOM2
2           1       Process2    UOM1
3           NULL    Process3    NULL

select a.ActivityID, u.UOMID, a.ProcessNam, u.UOMText 
from Activity a 
left outer join UOM u on a.UOMID=u.UOMId where a.UOMId is not null

返回

ActivityID  UOMID   ProcessNam  UOMText
1           2       Process1    UOM2
2           1       Process2    UOM1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    相关资源
    最近更新 更多