哪个更好,有什么区别?
SELECT * FROM TABLE_A A WHERE A.ID IN (SELECT B.ID FROM TABLE_B B)
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * FROM TABLE_A A, TABLE_B B WHERE A.ID = B.ID
Run Code Online (Sandbox Code Playgroud)
"最佳"方法是使用标准ANSI JOIN语法:
SELECT (columns)
FROM TABLE_A a
INNER JOIN TABLE_B b
ON b.ID = a.ID
Run Code Online (Sandbox Code Playgroud)
第一个WHERE IN版本通常会产生相同的执行计划,但在某些平台上它可能会更慢 - 它并不总是一致的.当您开始添加更多表或创建更复杂的连接条件时,IN查询(相当于EXISTS)也会变得越来越麻烦,因为它不像实际那样灵活JOIN.
第二个以逗号分隔的语法不像以前一样受支持JOIN.它适用于大多数SQL DBMS,但它不是"首选"版本,因为如果省略该WHERE条款,那么最终会得到一个交叉产品.然而,如果你忘记写JOIN条件,你最终会出现语法错误. JOIN由于这种安全网,往往是首选.