FULL OUTER JOIN之类的功能

时间:2019-02-11 14:30:57

标签: sql google-bigquery

以下查询有效:

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 :(得分:2)

以下是BigQury标准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   

尝试,除非问题中缺少某些特定细节,否则它应该可以工作

答案 1 :(得分:0)

您想要一个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;

至少,当我尝试类似查询时,它们会起作用。

我会警告说,这种方法无法很好地扩展。因此它可能不适用于您的实际数据。