Фильтрация строк из одной таблицы в другую - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть две таблицы 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 |
+---------+---------+---------+

1 Ответ

0 голосов
/ 10 сентября 2018
#standardSQL
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 a.*
FROM table1 a
LEFT JOIN (
  SELECT DISTINCT col1, col2
  FROM table2 
) b
USING(col1, col2)
WHERE b.col1 IS NULL   


Row Col1    Col2    Col3     
1   Value 4 Value 5 Value 6  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...