在子查询中使用DISTINCT时如何重写子查询以使用连接?

时间:2010-10-07 05:58:59

标签: sql mysql join subquery

我有一个查询,我使用子查询,我想重写为一个连接,以获得更好的性能。

子查询使用DISTINCT,因为有很多记录,而我遇到的问题是,当我使用连接时,它们在连接中会多次结束。

那么如何重写这样的查询才能使用join:

SELECT * 
FROM   table1 a 
       JOIN table2 b 
         ON b.field1 = a.field1 
WHERE  b.field3 = 1531 
       AND a.field4 = 0 
       AND a.field5 IN (SELECT DISTINCT field5 
                        FROM   table3 
                        WHERE  field6 = 172) 

2 个答案:

答案 0 :(得分:2)

类似的东西:

SELECT * 
FROM   table1 a 
       JOIN table2 b ON b.field1 = a.field1 
       JOIN ( SELECT DISTINCT field5 
                        FROM   table3 
                        WHERE  field6 = 172 ) C 
       ON C.field5 = a.field5

WHERE  b.field3 = 1531 AND a.field4 = 0 

如果没有看到实际数据,很难说,如果这不起作用,请告诉我。

答案 1 :(得分:0)

DISTINCT关键字重新定位到主查询中的SELECT子句,例如

SELECT DISTINCT a.*, b.*
FROM   table1 a 
       JOIN table2 b 
         ON b.field1 = a.field1 
       JOIN table3 c
         ON a.field5 = c.field5 
WHERE  b.field3 = 1531 
       AND a.field4 = 0 
       AND c.field6 = 172;

您应该在查询中查看SELECT *的使用情况,即不是最佳做法。