我有一个表,我们称它为“ a”,它在涉及许多表的视图中用在左联接中。但是,我只想返回“ a”的行(如果它们也与另一个表“ b”联接)。所以现有的代码看起来像
SELECT .... FROM main ... ... LEFT JOIN a ON (main.col2 = a.col2)
但它返回的行太多,尤其是其中a在b中不匹配的行。我试过了
SELECT ... FROM main ... ... LEFT JOIN ( SELECT a.col1, a.col2 FROM a JOIN b ON (a.col3 = b.col3)) ON (a.col2 = main.col2)
这给了我正确的结果,但是不幸的是,“ EXPLAIN PLAN”告诉我们,这样做会导致强制对a和b进行全表扫描,这使事情变得很慢。我的一位同事在b上建议了另一个LEFT JOIN,但这是行不通的,因为它在出现b时给了我b行,但并没有停止从b中没有匹配项的a行返回。
有什么方法可以将main.col2条件放入子SELECT中,从而摆脱全表扫描吗?或采取其他方式来做我想做的事?
SELECT … FROM .... LEFT JOIN ( a INNER JOIN b ON .... ) ON ....