Sql 全外连接与类函数

Sql 全外连接与类函数,sql,google-bigquery,Sql,Google Bigquery,以下查询工作: SELECT cat.category, exp.* FROM `expenses` exp join `categories` cat ON exp.Transaction like concat("%",cat.key,"%") LIMIT 1000 我想要它做的是一个完整的外部连接,这样我就可以在没有cat.key的情况下找到所有事务 我当前收到以下错误消息: 如果没有相等条件,则不能使用完全外部联接 连接两侧的字段数 我怎样才能解决这个问题?我尝试使

以下查询工作:

SELECT
  cat.category,
  exp.*
FROM
  `expenses` exp
join
  `categories` cat ON exp.Transaction like concat("%",cat.key,"%")
LIMIT
  1000
我想要它做的是一个完整的外部连接,这样我就可以在没有cat.key的情况下找到所有事务

我当前收到以下错误消息:

如果没有相等条件,则不能使用完全外部联接 连接两侧的字段数


我怎样才能解决这个问题?我尝试使用“不喜欢”,但这并不能满足我的需要。

您想要一个
左连接。我相信这应该在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;
至少,当我尝试这些查询时,类似的查询也能起作用


我要提醒大家,这不会很好地扩展。因此,它可能无法处理您的实际数据。

下面是针对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   

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

请提供您的输入集和desire output@christophLEFT OUTER JOIN,如果没有连接两侧字段相等的条件,则无法使用。>谢谢,但我在尝试时遇到了这个错误。@Christoph。这有一个相等的条件。一个
dum
。我甚至在小数据上测试了这个,所以语法是有效的。好的,谢谢,但对我来说,我一直收到这个错误。我又试了一次。@Christoph。我相信你。有时,BigQuery只在较大的数据集上发现荒谬之处。这会使测试备选方案变得更加困难。在我的案例中,我使用一个UDF并计算值,而不是合并它们。