Как переписать подзапрос, чтобы использовать соединения, когда вы использовали DISTINCT в подзапросе? - PullRequest
1 голос
/ 07 октября 2010

У меня есть запрос, в котором я использую подзапрос, и я хотел бы переписать его в объединение, чтобы повысить производительность.

Подзапрос использует DISTINCT, так как имеется много записей и проблема, с которой я столкнулсязаключается в том, что они объединяются несколько раз, когда я использую соединение.

Так как мне переписать запрос, подобный этому, чтобы использовать соединение:

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 ]

2 голосов
/ 07 октября 2010

Что-то вроде:

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 

Трудно сказать, не видя фактических данных, поэтому, если это не сработает, пожалуйста, дайте мне знать.

0 голосов
/ 07 октября 2010

Переместите ключевое слово 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 * в вашем запросе, т.е. не рекомендуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...