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). (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |