ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ и как функция - PullRequest
0 голосов
/ 11 февраля 2019

Следующий запрос работает:

SELECT
  cat.category,
  exp.*
FROM
  `expenses` exp
join
  `categories` cat ON exp.Transaction like concat("%",cat.key,"%")
LIMIT
  1000

Я хочу выполнить полное внешнее объединение, чтобы найти все транзакции без cat.key.

В настоящее время я получаю следующую ошибкусообщение:

FULL OUTER JOIN не может быть использовано без условия, которое является равенством полей с обеих сторон объединения.

Как я могу решить эту проблему?Я пытался использовать "не нравится", но это не дает того, что я хочу.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Ниже для BigQury Standard SQL

#standardSQL
SELECT 
  MAX(IF(exp.Transaction LIKE CONCAT("%",cat.key,"%"), cat.category, NULL)) category,
  ANY_VALUE(EXP).*
FROM `project.dataset.expenses` `exp`
CROSS JOIN `project.dataset.categories` cat 
GROUP BY TO_JSON_STRING(`exp`)
LIMIT 1000   

Попробуйте, это должно работать, если в вопросе отсутствуют некоторые конкретные детали

0 голосов
/ 11 февраля 2019

Вы хотите LEFT JOIN.Я считаю, что это должно работать в BigQuery:

SELECT e.*
FROM (SELECT e.*, 1 as dum
      FROM expenses e
     ) e LEFT JOIN
     (SELECT c.*, 1 as dum
      FROM categories c
     ) c
     ON e.dum = c.dum AND
        e.Transaction like concat('%', c.key, '%)
WHERE c.key IS NULL
LIMIT 1000;

По крайней мере, подобные запросы работают, когда я их пробую.

Я предупрежу, что это не будет хорошо масштабироваться.Так что это может не сработать с вашими фактическими данными.

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