我写了这样的查询
SELECT *
FROM (SELECT
TABLE2.VAL AS VAL1,
TABLE2.VAL AS VAL2,
TABLE2.VAL AS VAL3,
TABLE2.VAL AS VAL4,
TABLE2.VAL AS VAL5,
TABLE2.VAL AS VAL6,
CASE
WHEN VAL1 IS NULL THEN '10'
WHEN VAL3 IS NULL THEN '20'
WHEN VAL5 IS NULL THEN '30'
ELSE '40'
END PROGRESS
FROM
TABLE1, TABLE2
WHERE
TABLE1.KEY = TABLE2.KEY(+)
TABLE2.COND IN ('1','2','3','4','5','6')
)
WHERE
PROGRESS > '20'
此查询无效。
中有错误,CASE WHEN VAL1 IS NULL THEN '10'
WHEN VAL3 IS NULL THEN '20'
WHEN VAL5 IS NULL THEN '30'
ELSE '40' END PROGRESS
这一部分。错误说VAL1是不一致的。
如果我像这样使用
,我可以解决这个问题FROM TABLE2 TB2_1, TABLE2 TB2_2, TABLE3 TB2_3
WHERE TB2_1.KEY(+) = TABLE1.KEY AND TB2_2.KEY(+) = TABLE1.KEY
多次声明相同的表,但
我不想这样做,因为真正的查询比这复杂得多。
有什么方法可以区分这样的外表吗?
,CASE WHEN TABLE2[1].VAL IS NULL THEN '10'
WHEN TABLE2[2].VAL IS NULL THEN '20'
WHEN TABLE2[3].VAL IS NULL THEN '30'
ELSE '40' END PROGRESS
或任何其他方式。请帮助:)
答案 0 :(得分:0)
使用正确的显式JOIN
语法:
SELECT . . .
FROM TABLE1 LEFT JOIN
TABLE2
ON TABLE1.KEY = TABLE2.KEY AND
TABLE2.COND IN ('1','2','3','4','5','6')
简单规则:从不在FROM
子句中使用逗号。 始终使用明确的JOIN
语法。
答案 1 :(得分:0)
请勿在{{1}}声明中使用别名:
CASE
我不知道你的CASE WHEN TABLE2.VAL IS NULL THEN '10'
WHEN TABLE2.VAL IS NULL THEN '20'
WHEN TABLE2.VAL IS NULL THEN '30'
ELSE '40'
END PROGRESS
语句的含义是什么,因为它有6次相同的列别名,但希望这个答案至少会删除你当前的错误。
您还应该接受@Gordon的建议,并使用明确的左(外)联接。您正在使用的语法很难阅读。