sql – LEFT JOIN(OUTER JOIN)与INNER JOIN的条件
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). (编辑:济南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 远摄变焦镜头 佳能70-200mm F4L IS II
- 所以在动态列的基础上再把表、分组字段、站长 aspzz行转列字
- 中广核与腾讯合作 首推互联网+清洁能源
- MSSQL分页存储过程完整实例 详解MSSQL分页存储过程
- Html屏蔽右键菜单和左键划字功能的示例
- 使用MSSQL查询获取父级的所有子级
- Linux创始人:SCO所列侵权文件都是他的原创
- sql-server-2008 – 在更改的数据库模式上重播SQL Server事
- sql – Doctrine 2.1其中外键id =?,编辑:在Doctrine 2.2中
- sql-server – 使用带有nHibernate的CreateSQLQuery的SQL S