【问题标题】: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

      【讨论】:

      • 这两个都比NOT IN好。
      猜你喜欢
      • 2019-12-29
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多