запрос SQL для возврата различий между двумя таблицами

Я пытаюсь сравнить две таблицы, SQL Server, для проверки некоторых данных. Я хочу возвратить все строки из обеих таблиц, где данные или в одном или в другом. В сущности я хочу показать все несоответствия. Я должен проверить три части данных при этом, FirstName, LastName и продукта.

Я довольно плохо знаком с SQL, и на большое количество решений кажется, что я нахожу, по усложнению вещей. Я не должен волноваться о ПУСТЫХ УКАЗАТЕЛЯХ.

Я запустил путем попытки чего-то вроде этого:

SELECT DISTINCT [First Name], [Last Name], [Product Name] FROM [Temp Test Data]
WHERE ([First Name] NOT IN (SELECT [First Name] 
FROM [Real Data]))

Я испытываю затруднения при взятии этого далее все же.

Спасибо!

Править:

На основе ответа @treaschf я пытался использовать изменение следующего запроса:

SELECT td.[First Name], td.[Last Name], td.[Product Name]
FROM [Temp Test Data] td FULL OUTER JOIN [Data] AS d 
ON td.[First Name] = d.[First Name] AND td.[Last Name] = d.[Last Name] 
WHERE (d.[First Name] = NULL) AND (d.[Last Name] = NULL)

Но я продолжаю возвращать 0 результатов, когда я знаю, что существует по крайней мере 1 строка в td, который не находится в d.

Править:

Хорошо, я думаю, что понял это. По крайней мере, за мои несколько минут тестирования это, кажется, работает достаточно хорошее.

SELECT [First Name], [Last Name]
FROM [Temp Test Data] AS td
WHERE (NOT EXISTS
        (SELECT [First Name], [Last Name]
         FROM [Data] AS d
         WHERE ([First Name] = td.[First Name]) OR ([Last Name] = td.[Last Name])))

Это в основном собирается сказать мне, что находится в моих данных тестирования, которые не находятся в моих реальных данных. Который абсолютно хорошо для того, что я должен сделать.

182
задан Roman Pekar 9 May 2015 в 07:33
поделиться

3 ответа

Если у вас есть таблицы A и B , как с Colum C , вот записи, которые присутствуют в Таблица А , но не в b :

SELECT A.*
FROM A
    LEFT JOIN B ON (A.C = B.C)
WHERE B.C IS NULL

Чтобы получить все различия с одним запросом, полное соединение необходимо использовать, как это:

SELECT A.*, B.*
FROM A
    FULL JOIN B ON (A.C = B.C)
WHERE A.C IS NULL OR B.C IS NULL

Что вам нужно знать В этом случае то, что когда запись можно найти в A , но не в b , чем столбцы, которые происходят из b , будут нулевыми, а также Точно так же для тех, которые присутствуют в B , а не в A , колонны из A будут нулевыми.

195
ответ дан 23 November 2019 в 06:03
поделиться
(   SELECT * FROM table1
    EXCEPT
    SELECT * FROM table2)  
UNION ALL
(   SELECT * FROM table2
    EXCEPT
    SELECT * FROM table1) 
234
ответ дан 23 November 2019 в 06:03
поделиться

Попробуйте:

SELECT 
    [First Name], [Last Name]
FROM 
    [Temp Test Data] AS td EXCEPTION JOIN [Data] AS d ON 
         (d.[First Name] = td.[First Name] OR d.[Last Name] = td.[Last Name])

гораздо прочнее читать.

2
ответ дан 23 November 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: