Сравнение таблиц SQL Server и поиск подходящих результатов - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь сравнить две таблицы, A и B, чтобы найти случаи, когда A существует, но идентичная запись не существует в B.

Таблица A:

|PROJECT|ID|USER|DATE|
+-------+--+----+----+
|   2   |1 |ASD |0624|
|   3   |2 |FGH |0624|

Таблица B:

|PROJECT|ID|USER|DATE|
+-------+--+----+----+
|   2   |1 |ASD |0624|

Я бы хотел видеть мой вывод следующим образом:

|PROJECT|ID|USER|DATE|MATCHING_ID|
+-------+--+----+----+-----------+
|   2   |1 |ASD |0624|     1     |
|   3   |2 |FGH |0624|    NONE   |

Я пробовал что-то вроде этого, но я просто синтаксические или неоднозначные ошибки имени столбца.Я не совсем уверен, что я делаю не так.Я последовал нескольким примерам, но оказался в той же ситуации.

SELECT [PROJECT], [ID],  [USER], [DATE]
FROM [TABLE_A] 
LEFT JOIN [TABLE_B] ON [ID] = [ID]
WHERE [DATE] >= DATEADD(mm, -2, GETDATE())

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Исправьте свои JOIN условия и используйте COALESCE():

SELECT A.*, COALESCE(B.ID, 'NONE') as MATCHING_ID
FROM [TABLE_A] A LEFT JOIN
     [TABLE_B] B
     ON A.[ID] = B.[ID] AND
        A.[DATE] = B.[DATE] AND
        A.PROJECT = B.PROJECT AND
        A.USER = B.USER;
0 голосов
/ 25 июня 2019

Вы можете использовать оператор CASE и EXISTS:

SELECT a.*,
CASE WHEN EXISTS (
  SELECT 1 FROM [TABLE_B] b
  WHERE a.PROJECT = b.PROJECT AND a.ID = b.ID AND a.USER = b.USER AND a.DATE = b.DATE
) THEN a.ID ELSE 'NONE' END MATCHING_ID
FROM [TABLE_A] a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...