Reputation: 833
I'm trying to compare two tables, A
and B
, to find instances where A
exists but an identical record does not exist in B
.
Table A:
|PROJECT|ID|USER|DATE|
+-------+--+----+----+
| 2 |1 |ASD |0624|
| 3 |2 |FGH |0624|
Table B:
|PROJECT|ID|USER|DATE|
+-------+--+----+----+
| 2 |1 |ASD |0624|
I'd like to see my output like this:
|PROJECT|ID|USER|DATE|MATCHING_ID|
+-------+--+----+----+-----------+
| 2 |1 |ASD |0624| 1 |
| 3 |2 |FGH |0624| NONE |
I've tried something like this but I just syntax or ambiguous column name errors. I'm not fully sure what I'm doing wrong. I've followed a few examples but ended up in the same situation.
SELECT [PROJECT], [ID], [USER], [DATE]
FROM [TABLE_A]
LEFT JOIN [TABLE_B] ON [ID] = [ID]
WHERE [DATE] >= DATEADD(mm, -2, GETDATE())
Upvotes: 0
Views: 42
Reputation: 164154
You can use a CASE statement and 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
Upvotes: 0
Reputation: 1270573
Fix your JOIN
conditions and use 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;
Upvotes: 1