' featurename'缺少列分配

时间:2017-09-28 09:52:54

标签: presto

我正在尝试编写一个CASE语句,其中我需要运行子查询来检查记录是否在访问表中可用。如果该人有访问权,那么得分应该在0到100之间,并且如果没有,那么该值应为NULL。但是查询失败了,错误上写着“错过列ID分配”#。

我的查询:

SELECT 
        CASE
            WHEN EXISTS (SELECT * FROM hive_dsn.db.access AS aa WHERE ub.id=aa.id) 
                 THEN COALESCE(ub.score*100,0)
            ELSE 
                 NULL
        END AS UNUSED
FROM hive_dsn.db.unused_output AS ub;

基本上,我不理解错误陈述。这个错误说的是什么,我该如何解决这个问题。

先谢谢。

2 个答案:

答案 0 :(得分:0)

我发现where条件是检查列而不是没有任何JOIN的值。 我重写了如下查询:

SELECT 
        CASE
            WHEN EXISTS (SELECT ub.personid FROM hive_dsn.db.access AS aa 
                              JOIN hive_dsn.db.unused_output AS ub  ON ub.id=aa.id) 
                    THEN COALESCE(ub.score*100,0)
            ELSE NULL
        END AS UNUSED
from hive_dsn.db.unusedoutput AS ub;

这个JOIN条件解决了这个问题。

答案 1 :(得分:0)

可以使用join来实现,而不是相关的子查询。

这是样本......

 SELECT 
        CASE
            WHEN  aa.id is null then null                
                else THEN COALESCE(ub.score*100,0)
               END AS UNUSED
FROM hive_dsn.db.unused_output AS ub
left join hive_dsn.db.access AS aa
on ub.id=aa.id     ;

注意:如果表格中存在1:n关系,请在选择语句中使用不同