Почему этот оператор BigQuery WHERE NOT IN не дает результатов? - PullRequest
1 голос
/ 28 мая 2020

Мы ожидаем, что этот запрос Google BigQuery удалит не более 10 строк результатов, но этот запрос дает нам нулевые результаты, несмотря на то, что в таблице A есть тысячи строк с уникальными ENCNTR_ID.

SELECT ENCNTR_ID
FROM `project.dataset.table_A`
WHERE ENCNTR_ID NOT IN
(
SELECT ENCNTR_ID
FROM `project.dataset.table_B`
LIMIT 10
)

Если мы сделаем запрос самореферентным, он будет вести себя так, как ожидалось: мы получаем тысячи результатов, удалив всего 10 строк.

SELECT ENCNTR_ID
FROM `project.dataset.table_A`
WHERE ENCNTR_ID NOT IN
(
SELECT ENCNTR_ID
FROM `project.dataset.table_A` # <--- same table name
LIMIT 10
)

Что мы делаем не так? Почему первый запрос дает нулевой результат, а не просто удаляет 10 строк результатов?

1 Ответ

1 голос
/ 28 мая 2020

Решение : Используйте NOT EXISTS вместо NOT IN при работе с возможными значениями NULL:

SELECT *
FROM UNNEST([1,2,3]) i
WHERE NOT EXISTS (SELECT * FROM UNNEST([2,3,null]) i2 WHERE i=i2)

# 1

Предыдущее предположение, которое оказалось причиной:

SELECT *
FROM UNNEST([1,2,3]) i
WHERE i NOT IN UNNEST([2,3])

# 1

vs

SELECT *
FROM UNNEST([1,2,3]) i
WHERE i NOT IN UNNEST([2,3,null])

# This query returned no results.

Есть ли в этом project.dataset.table_B?

нули
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...