У меня есть две таблицы BigQuery:
TABLE 1
+---------+---------+---------+
| Col1 | Col2 | Col3 |
+---------+---------+---------+
| Value 1 | Value 2 | Value3 |
| Value 4 | Value 5 | Value 6 |
+---------+---------+---------+
TABLE 2
+---------+---------+--------+
| Col1 | Col2 | Col4 |
+---------+---------+--------+
| Value 1 | Value 2 | Value7 |
+---------+---------+--------+
Мне нужно удалить из TABLE 1
все пары Col1-Col2
, существующие в TABLE 2
Вы можете построить тестовые данные с помощью
WITH
TABLE1 AS (
SELECT "Value 1" AS Col1,"Value 2" as Col2, "Value3" AS Col3
UNION ALL
SELECT "Value 4","Value 5", "Value 6"
),
TABLE2 AS (
SELECT "Value 1" AS Col1,"Value 2" as Col2, "Value7" AS Col4
)
Я попробовал эту нотацию, но она не работает
SELECT * FROM TABLE1
EXCEPT DISTINCT (
SELECT Col1, Col2 FROM TABLE2
)
Единственный способ, который я нашел, - это первые строки фильтра и объединить их вместе:
SELECT t1.*, t2.* EXCEPT(Col1,Col2)
FROM (
SELECT Col1,Col2
FROM TABLE1
EXCEPT DISTINCT (
SELECT Col1, Col2 FROM TABLE2
)) AS t1
LEFT JOIN TABLE1 AS t2 ON t1.Col1 = t2.Col1 AND t1.Col2 = t2.Col2
Вы знаете простой способ сделать это, используя только функцию EXCEPT
?
Выходные данные - это строки из первой таблицы, отфильтрованные по первым 2 столбцам второй таблицы
+---------+---------+---------+
| Col1 | Col2 | Col3 |
+---------+---------+---------+
| Value 4 | Value 5 | Value 6 |
+---------+---------+---------+