在进行左外连接时,避免使用OR条件,改用UNION ALL操作实现。
示例代码:
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.id = table2.id WHERE table1.name = 'John' OR table2.age > 30 -- 错误写法,会导致OR条件失效
改为:
SELECT * FROM ( SELECT * FROM table1 WHERE name = 'John' ) t1 LEFT OUTER JOIN ( SELECT * FROM table2 WHERE age > 30 ) t2 ON t1.id = t2.id
或者:
SELECT * FROM table1 LEFT OUTER JOIN ( SELECT * FROM table2 WHERE age > 30 UNION ALL SELECT * FROM table2 WHERE id IS NULL -- 需要保证左连接时不存在该记录 ) t2 ON table1.id = t2.id WHERE table1.name = 'John'