起初,好像你应该把
AND tbl2.col2 = 'zyx' and tbl2.col3 = 'abc'
进入WHERE子句,但是这会与OUTER JOIN冲突。 WHERE限制结果如此添加,使其成为内连接。一对夫妇不同的方式来写,这可能是:
加入零点到哪里
Select * FROM tbl1
LEFT OUTER JOIN tbl2 ON tbl1.id = tbl2.id
WHERE tbl1.col1 = 'pqr'
AND ((tbl2.col2 = 'zyx' AND tbl2.col3 = 'abc')
OR (tbl2.col2 = NULL AND tbl2.col3 = NULL))
或使用子查询
SELECT * FROM tbl1
LEFT OUTER JOIN
(
SELECT *
FROM tbl2
WHERE tbl2.col2 = 'zyx' and tbl2.col3 = 'abc'
) AS temp2 ON tbl1.id = temp2.id
WHERE tbl1.col1 = 'pqr'
我可能会选择子查询的方法,因为它只是更清晰你的意图是什么。就性能而言,WHERE中的任何列通常应该由索引覆盖。除此之外,无论您编写查询的方式如何,优化程序都应该能够找到最佳方法。
@Rahuls:什么是'tb3.col3'? – Quassnoi 2010-02-18 17:36:16
tb3从哪里来? – froadie 2010-02-18 17:36:39
输入错误,修好对不起 – 2010-02-18 17:40:57