2017-07-11 82 views
0

我使用查询来创建表,其中一列中有一个SET。由于默认别名导致的语法错误(_c3)

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数据有它的“特殊”二字查询。我也想要一个布尔值来指示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; 

所以在选择线路array_contains我收到此错误信息:

编译语句时出错:FAILED:无法识别'T1'附近的输入。''选择表达式中的'_c3'。

当我删除从选择该行,只是运行:

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

'_c3'是非法别名/列名称,因为下划线是它的第一个字符。使用'\'_c3 \''代替(或重命名列或甚至更好,别名表达式在第一位) –

+0

这样做!非常感谢你。如果你把它写成答案,我会接受它。 – RebeccaK375

回答

1

_c3是非法的别名/列名称,因为下划线是它的第一个字符。
如果您想使用它,请用蜱迹(`)包裹它。
花药选项将重命名为列。
最干净的解决方案应该是首先将表达别名。