Как обработать подзапрос без результатов? - PullRequest
1 голос
/ 23 мая 2019

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

Какя могу достичь того, чего хочу?

Это мой запрос:

SELECT 
m.Material,
p.Plant
FROM dbo.AllPlants AS p
JOIN dbo.AllMaterials AS m
ON p.MaterialID = m.MaterialID
WHERE p.Plant IN ( SELECT Plant FROM dbo.MyFavoritePlants);

Если у меня нет любимых растений, я хочу все растения!

Ответы [ 3 ]

2 голосов
/ 23 мая 2019

Вы можете добавить второе условие для обработки этого сценария:

SELECT 
m.Material,
p.Plant
FROM dbo.AllPlants AS p
JOIN dbo.AllMaterials AS m
ON p.MaterialID = m.MaterialID
WHERE p.Plant IN (SELECT Plant FROM dbo.MyFavoritePlants)
   OR NOT EXISTS (SELECT 1 FROM dbo.MyFavoritePlants)
0 голосов
/ 23 мая 2019

У меня пока недостаточно репутации, чтобы комментировать, но это может сработать

SELECT 
m.Material,
p.Plant
FROM dbo.AllPlants AS p
JOIN dbo.AllMaterials AS m ON p.MaterialID = m.MaterialID
LEFT JOIN dbo.MyFavoritePlants FP ON FP.Plant = P.Plant
0 голосов
/ 23 мая 2019

Вместо подзапроса вы можете использовать LEFT JOIN.Поэтому, если в таблице MyFavoritePlants нет записи, она игнорирует условие LEFT JOIN.

SELECT m.Material,
       p.Plant
FROM dbo.AllPlants AS p
JOIN dbo.AllMaterials AS m ON p.MaterialID = m.MaterialID
LEFT JOIN dbo.MyFavoritePlants FP ON FP.Plant = p.Plant
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...