SUBQUERY и INNER JOIN - различия между MySQL и SQL - PullRequest
0 голосов
/ 09 мая 2018

Это простой запрос, который я использовал (например, LIMIT 1, а не TOP 1) несколько раз в моей собственной базе данных MySQL:

SELECT
    j1.status AS "Status",
    j1.number AS "Number",
    (
        SELECT TOP 1
            i2.invoicedDate
        FROM invoices AS i2
        INNER JOIN jobs AS j2 ON i2.jobKey = j2.id
        WHERE
            j1.id=j2.id
            AND
            j2.status = 'INVOICED'
    ) AS "Invoiced Date"
FROM jobs AS j1

Допустим, в om.jobGroup есть 183 000 строктаблица, в MySQL результат будет возвращать все 183 000 результатов - и если в подзапросе ничего не будет найдено, он будет возвращать NULL

, когда я выполняю тот же запрос на сервере Microsoft SQL;он не только занимает значительно больше времени, но и возвращает только 1700 записей?

Каков наилучший способ приблизиться к этому с точки зрения SQL - я лаю неправильное дерево?

Удаление подзапросаи выполнение объединения по основному запросу все еще приводит к несоответствию записей.

1 Ответ

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

Предполагая, что идентификаторы уникальны, я думаю, что запрос, который вы хотите в любой базе данных, выглядит следующим образом:

SELECT j1.status AS "Status", j1.number AS "Number",
       (SELECT TOP 1 i2.invoicedDate
        FROM invoices i2
        WHERE i2.jobKey = j1.id AND j1.status = 'INVOICED'
       ) Invoiced_Date
FROM jobs j1;

Обычно TOP / LIMIT используется с ORDER BY.

Ничто в подзапросе в SELECT не приведет к изменению количества строк.

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