【发布时间】:2023-03-05 12:55:01
【问题描述】:
我是个小问题...我认为这只是一个语义问题... 谁能解释一下这两个查询的真正区别?如果有的话……
// #1 - Query with join
SELECT DISTINCT cli.COD_CLIENTE
FROM CLIENTI cli
JOIN BANCHE b
ON b.COD_BANCA = cli.COD_BANCA
JOIN SOA_CONO_VISIB cv
ON cv.COD_SOCIETA = b.SOCIETA_SOA
AND cv.FLAG_ENTITA_OPER = 1
AND cv.COD_MACRO_CLASSE <> 'RFE'
AND cv.DATA_FINE_OPERATIVITA IS NULL
WHERE cv.COD_SOCIETA = '01'
AND cv.COD_ENTITA = '00008';
// #2 - Query with implicit join
SELECT DISTINCT cli.COD_CLIENTE
FROM CLIENTI cli, BANCHE b, SOA_CONO_VISIB cv
WHERE cv.COD_SOCIETA = '01'
AND cv.COD_ENTITA = '00008'
AND b.COD_BANCA = cli.COD_BANCA
AND cv.COD_SOCIETA = b.SOCIETA_SOA
AND cv.FLAG_ENTITA_OPER = 1
AND cv.COD_MACRO_CLASSE <> 'RFE'
AND cv.DATA_FINE_OPERATIVITA IS NULL;
【问题讨论】:
-
没有区别,除了第二个更难解析以查看您是否错过了连接条件。在使用第一种语法的内部连接中,为了清楚起见,最好将谓词仅引用一个表放在 where 中。
-
补充马丁的非常正确的答案:如果您切换到 LEFT 或 RIGHT JOIN 而不是 INNER,将会有所不同。
-
@Martin 你应该明确发布这个答案。
-
@SylvainLeroux this is certainly a duplicate
-
没有区别。甚至像“一个更难解析”这样的陈述也确实是见仁见智。