我使用查询来创建一个表,其中一列中有一个SET。
T1:
serial _c3
1 193748 ["special","normal","normal"]
2 263565 ["normal","normal"]
然后我有另一张只有连续剧的表。
T2:
serial
1 193748
2 263565
3 636474
4 928396
我想要一个从T2生成序列号的查询,如果它们不在T1中,或者T1的_c3数据有单词" special"在里面。我还想要一个布尔值,指示T1是否在T2中。
所以使用上面的例子,我想:
T3:
serial in_t1
1 193748 1
3 636474 0
4 928396 0
到目前为止,这是我的查询:
SELECT
T2.serial,
array_contains(T1._c3, 'special') as in_t1
FROM T2 LEFT OUTER JOIN T1 ON T1.serial = T2.serial
WHERE T1.serial is NULL OR array_contains(T1._c3, 'special')
LIMIT 50;
因此对于select行中的array_contains,我收到以下错误消息:
编译语句时出错:FAILED:无法识别' T1'附近的输入'' ' _c3'在选择表达式中。
当我从select中删除该行并运行时:
SELECT
T2.serial
FROM T2 LEFT OUTER JOIN T1 ON T1.serial = T2.serial
WHERE T1.serial is NULL OR array_contains(T1._c3, 'special')
LIMIT 50;
我得到了同样的错误,但现在在WHERE子句行中:无法识别' T1'附近的输入'' ' _c3'在选择表达式
中你能指出我正确的方向吗?谢谢!
答案 0 :(得分:1)
_c3
是非法别名/列名,因为下划线是其第一个字符
如果你想使用它,请用滴答符号(`)包装它
另一种选择是重命名为列
最干净的解决方案就是首先对表达式进行别名。