Как получить все строки, используя IN подзапрос, если подзапрос не возвращает строк - PullRequest
0 голосов
/ 07 ноября 2019

У меня такой запрос:

SELECT * FROM A
WHERE ID IN(
        SELECT ID FROM B WHERE STATUS=1
    )

Я хочу получить все строки, если подзапрос нулевой

Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

Вы должны использовать LEFT JOIN

SELECT A.* FROM A LEFT JOIN B ON A.ID = B.ID AND B.Status = 1
0 голосов
/ 07 ноября 2019

Если вы имеете в виду Я хочу получить все строки, если подзапрос не возвращает строк использовать трехэтапный подход

1 Проверить подзапрос

select count(*) FROM B WHERE STATUS=1

Если вы получите результат> 0, выполните шаг 2, в противном случае с тремя

2 получите результат подзапроса

-- your original query
SELECT * FROM A
WHERE ID IN(
        SELECT ID FROM B WHERE STATUS=1
    )

3 Получить все данные

SELECT * FROM A

Альтернативный подход к одному запросу

Используя OR, вы пишете запрос так, как говорите: если запрос не возвращает noстроки получают все данные.

SELECT * FROM A
WHERE ID IN(
        SELECT ID FROM B WHERE STATUS=1
    )
OR (SELECT count(*) FROM B WHERE STATUS=1) = 0
0 голосов
/ 07 ноября 2019

Вы можете использовать LEFT JOIN и DISTINCT следующим образом:

SELECT DISTINCT A.* FROM A LEFT JOIN B
ON (A.ID = B.ID AND B.STATUS= 1)

Cheers !!

...