【问题标题】:Full Join diff left + right jointFull Join 差异左 + 右关节
【发布时间】:2021-04-02 20:28:46
【问题描述】:

如果我有 2 个表:T1 和 T2,我会这样做:

select ISNULL(T1.Name, T2.Name) AS Name
from T1
FULL JOIN T2 ON T1.Product = T2.Product

还有这个加入:

select ISNULL(ISNULL(T1.Name, T2.Name),T3.Name) AS Name
from T1
Left JOIN T2 ON T1.Product = T2.Product
Right JOIN T2 T3 ON T1.Product = T3.Product

它们是相同的还是某些情况不同?

【问题讨论】:

  • ISNULL 不接受三个参数
  • 是的,你是对的
  • “它们是相同的还是某些情况不同?” 为什么不运行您的代码并找出答案?但是,我可以告诉您,从处理的角度来看,这些查询不同
  • @Larnu 我得到相同的结果,但也许我错了

标签: sql sql-server left-join full-outer-join


【解决方案1】:

两个查询不会产生相同的结果。

第一个查询返回两个表中的所有名称。第二个查询仅返回 t2 中的名称,因为最终的 right join

考虑这个简单的数据集:

insert into t1 (name, product) values ('foo1', 'bar'), ('baz1', 'zoo1');
insert into t2 (name, product) values ('foo2', 'bar'), ('baz2', 'zoo2');

两个表有一个共同的产品,一个产品自己。

第一个查询正确返回foo1baz1baz2,而第二个查询只返回foo1baz2

Demo on DB Fiddle

无关说明:一般情况下,使用coalesce()而不是isnull();这是标准 SQL,它接受两个以上的参数。

【讨论】:

    猜你喜欢
    • 2013-01-09
    • 2017-08-12
    • 1970-01-01
    • 2019-05-18
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多