Mysql-запрос ничего не возвращает, когда подзапрос возвращает 0 строк - PullRequest
3 голосов
/ 25 марта 2012

При попытке выбрать поля из подзапроса, если ЛЮБОЙ из подзапросов не возвращает никаких строк, тогда ничего не возвращается (даже пустой набор результатов)

SELECT sub1.field, sub2.another_field
    FROM (
        (
            SELECT field
            FROM table
            WHERE id=1
        ) AS sub1, (
            SELECT another_field
            FROM table
            WHERE id=2
        ) AS sub2
    )

Я надеялся на строку, содержащую значение NULL, когда подзапрос возвращает 0 строк.

Ответы [ 2 ]

3 голосов
/ 25 марта 2012

Вам необходимо выполнить внешнее соединение следующим образом

SELECT sub1.field, sub2.another_field
FROM (
        SELECT field, id
        FROM tab1
        WHERE id=1
    ) AS sub1 LEFT OUTER JOIN (
        SELECT another_field, id
        FROM tab1
        WHERE id=2
    ) AS sub2
  ON sub1.id = 1 and sub2.id = 2
0 голосов
/ 25 марта 2012

Чтобы решить проблему запроса, ничего не возвращающего в целом, когда все подзапросы возвращают ноль строк Я заключил весь лот в UNION с пустой строкой.

SELECT * FROM (
    SELECT sub1.field, sub2.another_field
    FROM (
        SELECT field, id
        FROM tab1
        WHERE id=1
    ) AS sub1

    LEFT OUTER JOIN (
        SELECT another_field, id
        FROM tab1
        WHERE id=2
    ) AS sub2
    ON sub1.id = 1 and sub2.id = 2

    UNION

    SELECT NULL, NULL

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