SQL Server НЕ СУЩЕСТВУЕТ из более чем одной таблицы - PullRequest
1 голос
/ 16 июня 2010

Мне нужно вернуть строки, если они существуют, если нет, вернуть, какое из переданных значений НЕ СУЩЕСТВУЕТ:

DECLARE @INPUT1 BIGINT
DECLARE @INPUT2 BIGINT
DECLARE @INPUT3 BIGINT

SELECT e.Name, d.Name, c.Name
   FROM Employee e
   JOIN Department d ON e.DeptID = d.DeptID
   JOIN City c ON e.CityID = c.CityID
WHERE
   e.EmpID = @INPUT1
   AND d.DeptID = @INPUT2
   AND c.CityID = @INPUT3

В приведенном выше SQL все входные данные INPUT1, INPUT2, INPUT3 правильно переданы, возвращает строку. Если нет, мне нужно найти, какой INPUTx не так. Я знаю, что могу написать 3 разных запроса о существовании, чтобы выяснить, какой из них НЕ существует. Есть ли лучший подход? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 28 июня 2010

Точная логика, которую вы хотите, неясна, но эта конструкция применяет фильтр как производную таблицу, и вы можете оставить соединение с ней. Так что если d.Name isnull, то @ INPUT2

не найдено
DECLARE @INPUT1 BIGINT, @INPUT2 BIGINT, @INPUT3 BIGINT

SELECT
    @INPUT1 AS NotThereIf_eName_IsNull,
    @INPUT2 AS NotThereIf_dName_IsNull,
    @INPUT3 AS NotThereIf_cName_IsNull,
    e.Name, d.Name, c.Name
FROM
    (SELECT @INPUT1 AS EmpID,  @INPUT2 AS DeptID, @INPUT3 AS CityID) dummy
    LEFT JOIN 
    Employee e ON dummy.EmpID = e.EmpID
    LEFT JOIN 
    Department d ON dummy.DeptID = d.DeptID AND e.DeptID = d.DeptID
    LEFT JOIN 
    City c ON dummy.CityID = c.CityID AND e.CityID = c.CityID
0 голосов
/ 16 июня 2010

Вы не можете использовать (внутреннее) объединение, потому что это исключит те записи, которые не совпадают.Поэтому вам придется использовать внешнее соединение.Учитывая это, скорее всего, было бы быстрее использовать 3 запроса в любом случае.На самом деле, 4, потому что вам понадобится 3, чтобы проверить 3 значения, затем другое, чтобы вернуть то, что вы хотите, если оно существует.покажите, какие из них НЕ существуют, а затем верните, что происходит с вашим запросом.И я думаю, вы могли бы объединить это в 3 столбца вместо 3 строк, но это все равно будет 3 запроса.

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