SQL: Поиск несоответствий

# #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 .