ГДЕ ВЫБРАТЬ заменить на соединение - PullRequest
0 голосов
/ 24 мая 2018

У меня есть SQL-запрос:

SELECT
    count(*) as count
FROM
    USERS.Names p1
WHERE
    p1.rowid IN (
            SELECT p2.rowid
            FROM USERS.Names p2
            WHERE
                p2.Id = p1.Id AND p2.status = p1.Status
                AND p2.DateTo = (SELECT max(p3.dateTo)
                                FROM USERS.Names p3
                                WHERE p3.entityid = p1.Id
                                        AND p3.status = p1.Status
                                        AND p3.Code = p2.Code)
  )
  AND p1.Status = 1
  AND p1.Id >= 12
  AND p1.Id < 31308;

Можно ли удалить вложенные SELECT с и заменить их на JOIN с?Этот запрос работает долго

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Возможно, вам нужно следующее:

SELECT count(1) count
  FROM Names p3 
            JOIN 
                (
                 SELECT max(p1.dateTo) dateTo_max
                   FROM Names p1 JOIN Names p2 
                     ON ( p2.entityid = p1.Id )  
                  WHERE p1.dateTo = p2.dateto
                    AND p1.Status = 1
                    AND p1.Id between 12 AND 31307) p4 
                     ON ( p3.dateto = p4.dateTo_max );
0 голосов
/ 24 мая 2018

Попробуйте это:

SELECT
    count(*) as count
FROM
    USERS.Names p1
INNER JOIN
    SELECT (
        MAX(dateto) MaxDateto
    FROM USERS.Names) p2
        ON p1.dateto = p2.MaxDateto
WHERE
    p1.Status = 1
    AND p1.Id >= 12
    AND p1.Id < 31308;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...