# #sql #database #google-bigquery
Вопрос:
моя первая таблица выглядит следующим образом (t1)
uid | car_id |
---|---|
s123 | 1234 |
р908 | 2345 |
q123 | 567 |
моя вторая таблица выглядит следующим образом (t2):
uid | Категория |
---|---|
s123 | Хонда |
р908 | мерседес |
То, что я пытаюсь сделать, — это найти идентификаторы uid (вместе с их идентификатором car_id) из t1, у которых нет соответствующего идентификатора uid в t2. Например, «q123» из t1 должен быть возвращен, поскольку он не отображается в t2. Есть идеи, как этого можно достичь?
Спасибо!
Ответ №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, но, судя по документам здесь, синтаксис выглядит точно так же, как в MS SQL. Кроме того, вот скрипка SQL, если она вам нужна.
Комментарии:
1. Любой из них лучше, чем
NOT IN
.