我正在尝试编写一个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;
基本上,我不理解错误陈述。这个错误说的是什么,我该如何解决这个问题。
先谢谢。
答案 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关系,请在选择语句中使用不同。