【问题标题】:SQL: Finding non-matchesSQL:查找不匹配项
【发布时间】:2021-09-21 14:07:09
【问题描述】:
我的第一个表如下所示 (t1)
| uid |
car_id |
| s123 |
1234 |
| p908 |
2345 |
| q123 |
567 |
我的第二张表如下所示 (t2):
| uid |
category |
| s123 |
honda |
| p908 |
mercedes |
我想要做的是从 t1 中找到在 t2 中没有匹配 uid 的 uid(连同他们的 car_id)。例如,应该返回来自 t1 的“q123”,因为它没有出现在 t2 中。知道如何实现吗?
谢谢!
【问题讨论】:
标签:
sql
database
google-bigquery
【解决方案1】:
SELECT uid, car_id
FROM t1
WHERE uid NOT IN (SELECT uid FROM t2 )
【解决方案2】:
使用LEFT JOIN 将带回LEFT 上的所有行,无论右侧是否匹配。由于您只想要不匹配的,您可以只在 WHERE 子句中包含这些。
SELECT t1.uid, t1.car_id, t2.category
FROM t1 LEFT JOIN t2 on t1.uid = t2.uid
WHERE t2.uid IS NULL
或者,您可以使用NOT EXISTS
SELECT t1.uid, t1.car_id
FROM t1
WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE t1.uid = t2.uid)
我从未使用过 Google Bigquery,但使用 docs here,语法看起来就像 MS SQL。另外,如果您需要,这里是SQL Fiddle。