我有一个查询,我使用子查询,我想重写为一个连接,以获得更好的性能。
子查询使用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)
答案 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 *
的使用情况,即不是最佳做法。