当前位置:  开发笔记 > 编程语言 > 正文

在SQL右连接中加入约束做什么吗?

如何解决《在SQL右连接中加入约束做什么吗?》经验,为你挑选了1个好方法。

我只需修复一个正在进行RIGHT JOIN的查询,右侧有一个额外的约束: RIGHT JOIN b ON b.key = a.key AND b.active = 'Y'

它似乎完全无视b.active约束.这是RIGHT JOIN的限制吗?我交换了表格并将b.active约束移到了WHERE中,我从来没有喜欢RIGHT JOIN,我认为这加强了我对它的厌恶.



1> Gordon Linof..:

这个查询:

SELECT . . .
FROM a RIGHT JOIN
     b
     ON b.key = a.key AND b.active = 'Y'

是相同的:

SELECT . . .
FROM b LEFT JOIN
     a
     ON b.key = a.key AND b.active = 'Y'

在这两种情况下,外连接的"驱动"表都有一个条件.左/右外连接的逻辑是将所有记录保留在一个表中,即使ON条件未评估为真也是如此.因此,该表上的条件不会导致任何过滤.

如果要对该表进行过滤,请使用以下WHERE子句:

SELECT . . .
FROM a RIGHT JOIN
     b
     ON b.key = a.key 
WHERE b.active = 'Y'

我还应该注意,以下两个查询相同:

SELECT . . .
FROM a RIGHT JOIN
     b
     ON b.key = a.key AND b.active = 'Y';

SELECT . . .
FROM a RIGHT JOIN
     b
     ON b.key = a.key;

它们返回相同的行集,假设没有重复的键b.然而,第二次返回匹配行a的时候b.active是不是'Y'.在这种情况下,第一个将返回NULL列的值a.这是一个微妙的差异.而且,说实话,我认为我没有找到太多用途.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有