Использование предложения where с Union в Google Sql Bigquery - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь объединить две таблицы, сравнивая совпадающее поле, но получаю следующую ошибку: - «SQL_ANALYSIS_ERROR: Unrecognized name: t2 (Line: 87, Column: 121)», где t2 переименован для моей второй таблицы

Вот мой код: -

CREATE OR REPLACE TABLE table_1 OPTIONS (
  quota_accounting_owner='sxxx@gmail.com')
AS 
  SELECT * FROM
  (
  SELECT * EXCEPT(fate_result), CAST(fate_result AS STRING) AS fate_result FROM table_1 AS t1 WHERE t2.e_id <> t1.e_id
  UNION DISTINCT
  SELECT * EXCEPT(fate_result), CAST(fate_result AS STRING) AS fate_result FROM table_2 AS t2
    );

1 Ответ

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

Вы можете использовать NOT EXISTS, чтобы выбрать только строки из table_1, которые не имеют соответствия e_id в table_2

CREATE OR REPLACE TABLE table_1 OPTIONS (
  quota_accounting_owner='sxxx@gmail.com')
AS 
  SELECT * FROM
  (
    SELECT * EXCEPT(fate_result), CAST(fate_result AS STRING) AS fate_result
    FROM table_1 AS t1
    WHERE NOT EXISTS (
       SELECT 1
       FROM table_2 AS t2
       WHERE t2.e_id = t1.e_id
    )
    UNION DISTINCT
    SELECT * EXCEPT(fate_result), CAST(fate_result AS STRING) AS fate_result
    FROM table_2 AS t2
  );

РЕДАКТИРОВАТЬ НЕ СУЩЕСТВУЕТ было бы правильным выбором для стандартного SQL, но, увидев комментарии ниже, здесь возникает ошибка. так что НЕ В может быть лучше

CREATE OR REPLACE TABLE table_1 OPTIONS (
  quota_accounting_owner='sxxx@gmail.com')
AS 
  SELECT * FROM
  (
    SELECT * EXCEPT(fate_result), CAST(fate_result AS STRING) AS fate_result
    FROM table_1 AS t1
    WHERE t1.e_id NOT IN (
       SELECT t2.ed_id
       FROM table_2 AS t2
    )
    UNION DISTINCT
    SELECT * EXCEPT(fate_result), CAST(fate_result AS STRING) AS fate_result
    FROM table_2 AS t2
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...