由于默认别名 (_c3) 而导致的语法错误

Syntax error due to a default alias (_c3)

我使用查询创建了一个 table,其中一列中有一个 SET。

T1:

    serial   _c3
1   193748   ["special","normal","normal"]
2   263565   ["normal","normal"]

然后我还有一个 Table 只有连续剧。

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 我收到此错误消息:

编译语句时出错:失败:无法识别 'T1' '.' 附近的输入select 表达式中的 '_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' '.' 附近的输入select 表达式中的 '_c3'

你能给我指出正确的方向吗?谢谢!

_c3 是非法的 alias/column 名称,因为第一个字符是下划线。
如果要使用它,请用刻度线 (`) 将其包裹起来。
另一个选择是重命名为列。
最干净的解决方案是首先为表达式设置别名。