设为首页 - 加入收藏 华夏网 ()- 云主机,资讯,互联网,人工智能,云计算,大赢家论坛,区块链,VR,站长网!
热搜: 平台 google 2019 中国
当前位置: 主页 > 水果奶奶论坛 > 正文

sql – LEFT JOIN(OUTER JOIN)与INNER JOIN的条件

发布时间:2021-02-25 07:45 所属栏目:[水果奶奶论坛] 来源:网络整理
导读:SELECT A.COL1,B.COL1,C.COL1FROM TABLEA ALEFT JOIN TABLEB B ON A.COL1 = B.COL1LEFT JOIN TABLEC C ON ( C.COL3 IS NOT NULL AND ( C.COL2 = 664 AND A.COL1 = C.COL1 )) 关于SQL的技术性,在LEFT JOIN TABLE C ON之后用括号写的条件是什么意思?为什么那

SELECT A.COL1,B.COL1,C.COL1
FROM TABLEA A
LEFT JOIN TABLEB B ON A.COL1 = B.COL1
LEFT JOIN TABLEC C ON (
        C.COL3 IS NOT NULL
        AND (
              C.COL2 = 664
              AND A.COL1 = C.COL1
        )
)

关于SQL的技术性,在LEFT JOIN TABLE C ON之后用括号写的条件是什么意思?为什么那些必要?

解决方法

内连接(JOIN或INNER JOIN,CROSS JOIN或逗号)首先执行CROSS JOIN. (即返回所有可以通过从左表中追加一行并从右表中追加一行来生成的行.)然后任何ON都会删除不符合其条件的行.对于左表(LEFT)或右表(RIGHT)或两个表(FULL),OUTER JOIN返回相应的INNER JOIN加的行,任何用NULL扩展的不匹配行. FROM a WHERE删除不符合其条件的行.

如果条件处于ON状态,则在FROM中删除匹配的行.但是,如果该条件改为在WHERE中,则匹配的行和通过后续连接合并它们的任何行仍然会被删除.因此,如果FROM仅具有内部联接,则条件是在ON还是在WHERE中无关紧要.

但是如果FROM在一个条件上有一个OUTER JOIN,则删除不满足条件的交叉连接行,并添加某些NULL扩展行,而将该条件移动到WHERE则删除但不添加.

对于INNER JOIN,语言没有必要为ON而不是t1 INNER JOIN t2 ON条件可能涉及(SELECT * FROM t1 INNER JOIN t2 WHERE条件).

从上面你可以得出以下结论:对于任何最后一次OUTER JOIN之后的一系列INNER JOINS(包括没有OUTER JOIN时),可以在它们的ON和WHERE之间自由移动条件.但不适用于任何最后一次OUTER JOIN之前或之前的ON,因为它们会影响其输入,从而影响输出的NULLed行.如果将这样的条件从ON移动到WHERE,则没有理由期望相同的结果.

对于你的代码:可能查询被设计为返回A.COL1作为具有关联的A,B和C信息的id,但是那些没有包含B信息的那些(B& C信息为NULL)和那些做的但是没有C信息或没有但是没有非NULL C.COL3或者但是没有C.COL2 = 664但是包含了(C信息为NULL).

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章