Я пытаюсь сравнить две таблицы, 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])))
Это в основном собирается сказать мне, что находится в моих данных тестирования, которые не находятся в моих реальных данных. Который абсолютно хорошо для того, что я должен сделать.
Если у вас есть таблицы 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
будут нулевыми.
( SELECT * FROM table1
EXCEPT
SELECT * FROM table2)
UNION ALL
( SELECT * FROM table2
EXCEPT
SELECT * FROM table1)
Попробуйте:
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])
гораздо прочнее читать.