我有一个表定义一行中的常量。我想通过使用这些常量的值来构造另一个表的查询,如:
SELECT DataTable.name FROM DataTable WHERE DataTable.key> Config.keyConstant
但我不知道如何干净利落地做到这一点。在这种情况下,可以使用CROSS JOIN
来完成SELECT DataTable.name FROM(DataTable CROSS JOIN Config)WHERE DataTable.key> Config.keyConstant
但是当我的查询变得更大并且在不同的地方需要配置时,这变得非常混乱。
有什么建议吗?在SQL中,我认为你是用变量做的。
编辑:其实我希望能够做类似的事情SELECT IF(Config.keyConstant * DataTable.key = 1,DataTable.name," John")FROM DataTable
这意味着,遗憾的是,我无法将所有条件逻辑移动到一个WHERE EXISTS子句中,就像答案中建议的那样(虽然我没有意识到这一点,而且很酷)。
答案 0 :(得分:1)
我认为你的方向正确:
下面的内容应该适用于BigQuery Legacy和Standard SQL,并且Config只有一行会使CROSS JOIN看起来不那么糟糕。
SELECT DataTable.name
FROM DataTable
CROSS JOIN Config
WHERE DataTable.key1 > Config.key1Constant
AND DataTable.key2 = Config.key2Constant
AND DataTable.key3 < Config.key3Constant
在BigQuery Standard SQL中,您可以将其更改为以下内容,这在某种程度上让我看起来更具便携性:
SELECT
DataTable.name
FROM DataTable
WHERE EXISTS (
SELECT 1 FROM config
WHERE DataTable.key1 > key1Constant
AND DataTable.key2 = key2Constant
AND DataTable.key3 < key3Constant
)
很少注意到:
答案 1 :(得分:0)
这是为了回答更新的问题:
Remove cached files