我有一个表(我们可以称之为"A")与一些字段(模型:字符串,年龄:整数,代码1:整数,代码2:整数,代码3:整数)和另一个表(它可以是"代码")与分类代码(代码:整数,代码类型:字符串,描述:字符串).
该字段代码类型用于分组代码.例如,200到300之间的代码是棕色的.每个项目最多可以有3个代码.
现在,我只想获得简单,简单的查询:
SELECT model,age FROM dataset.A
WHERE code1 IN (SELECT code FROM dataset.codes WHERE codetype='brown')
Run Code Online (Sandbox Code Playgroud)
它有效,除了事实,还有另外两个.所以,如果我这样做:
SELECT model,age FROM dataset.A
WHERE code1 IN (SELECT code FROM dataset.codes WHERE codetype='brown')
OR code2 IN (SELECT code FROM dataset.codes WHERE codetype='brown')
OR code3 IN (SELECT code FROM dataset.codes WHERE codetype='brown')
Run Code Online (Sandbox Code Playgroud)
它不起作用,我收到此错误消息:
Error: (xx:yy): Semijoin expression (i.e. "x IN (SELECT ...)") must be a part of logical AND.
Run Code Online (Sandbox Code Playgroud)
我相信谷歌应该有办法做到这一点.
顺便说一句,我正在开发的项目不是"A"和"代码".我真的需要一个解决方案.谢谢你的帮助.
BigQuery目前确实存在IN子查询必须与AND连接的限制.作为一种解决方法,您可以单独执行每个SELECT,然后UNION结果,即
SELECT model, age FROM
(SELECT model,age FROM dataset.A
WHERE code1 IN (SELECT code FROM dataset.codes WHERE codetype='brown')),
(SELECT model,age FROM dataset.A
WHERE code2 IN (SELECT code FROM dataset.codes WHERE codetype='brown')),
(SELECT model,age FROM dataset.A
WHERE code3 IN (SELECT code FROM dataset.codes WHERE codetype='brown'))
Run Code Online (Sandbox Code Playgroud)
这可能会导致(模型,年龄)对的重复,因此如果不需要,您可以使用删除重复项 GROUP BY model, age
| 归档时间: |
|
| 查看次数: |
1076 次 |
| 最近记录: |