Мне интересно, есть ли способ оптимизировать следующий запрос SELECT
.(Примечание: я набрал это при написании вопроса для несуществующих таблиц, и у меня может не быть правильного синтаксиса.)
Цель состоит в том, чтобы, если Таблица2 содержит какие-либо связанные строки, я хочу установить значение третьего столбца вколичество связанных строк в таблице 2.В противном случае, если Table3 содержит какие-либо связанные строки, я хочу установить в столбце количество связанных строк в Table3.В противном случае я хочу установить значение столбца в 0.
SELECT Id, Title,
CASE
WHEN EXISTS (SELECT * FROM Table2 t2 WHERE t2.RelatedId = Table1.Id) THEN
(SELECT COUNT(1) FROM Table2 t2 WHERE t2.RelatedId = Table1.Id)
WHEN EXISTS (SELECT * FROM Table3 t3 WHERE t3.RelatedId = Table1.Id) THEN
(SELECT COUNT(1) FROM Table3 t3 WHERE t3.RelatedId = Table1.Id)
ELSE 0
END AS RelatedCount
FROM Table1
Мне не нравится тот факт, что я в основном выполняю один и тот же запрос дважды (в двух случаях).Есть ли способ сделать то, что я хочу, выполняя запрос только один раз?
Обратите внимание, что это часть гораздо большего запроса с несколькими JOIN
с и UNION
с, поэтому нелегко выполнитьсовершенно другой подход.