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). 【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。 |
-
插入语句中C#应用程序中的MySql ODBC 5.1驱动程序的内存分配错误
我在C#中有一个.NET Wndows应用程序.这是一个使用MySq...[详细]
-
如何将ON DUPLICATE UPDATE与多值INSERT一起使用? IN...[详细]
-
我在Postgres中有一个多对多的连接表,我想索引到A)提...[详细]
-
sql-server – 如何在SQL Server数据库中设计用户/角色架构?
我想设计一个用户/角色系统: 用户具有名称和密码,然...[详细]
-
这是我的问题.例如,我有一个表包含一个字段的产品,名...[详细]
-
如下所示,我正在检查当前用户是否在table friend的use...[详细]
-
php – 不了解mysql语句DATE_ADD(NOW()INTERVAL)
我正在一个包含以下mysql行的页面上.总体目标只是将当...[详细]
-
我正在运行一个 python脚本,将大量数据插入到Postgres...[详细]
-
MySQL LIMIT / OFFSET:获取除第一个X之外的所有记录
我想查询50号及以上的所有记录.因此,我不想做LIMIT 49...[详细]
-
简单的网站访问量计数器实现,具体如下 首先说明 思路...[详细]