我正在尝试编写一个案例语句,其中我需要运行子查询以检查记录是否可在访问表中可用。如果该人有访问权限,那么得分应在0到100之间得到任何cocece的保管,如果不是,则该值应为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;
基本上,我不了解错误语句。这个错误在说什么,我该如何解决。
预先感谢。
我弄清楚了其中的条件是在没有任何联接的情况下检查列而不是值。我重写查询如下:
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来实现。
这是样本...
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关系船,则使用 in select select statement。>