我尝试从三个不同的表中选择值。当我选择所有列时,它运行良好,但如果我选择特定列,SQL错误[42000]:JDBC-8027:列名不明确。请显示。
这是选择了所有运行良好的查询
SELECT
*
FROM (SELECT x.*, B.*,C.* , COUNT(*) OVER (PARTITION BY x.POLICY_NO) policy_no_count
FROM YIP.YOUTH_POLICY x
LEFT JOIN
YIP.YOUTH_POLICY_AREA B
ON x.POLICY_NO = B.POLICY_NO
LEFT JOIN
YIP.YOUTH_SMALL_CATEGORY C
ON B.SMALL_CATEGORY_SID = C.SMALL_CATEGORY_SID
ORDER BY x.POLICY_NO);
这是错误查询
SELECT DISTINCT
x.POLICY_NO,
x.POLICY_TITLE,
policy_no_count ,
B.SMALL_CATEGORY_SID,
C.SMALL_CATEGORY_TITLE
FROM (SELECT x.*, B.*,C.* , COUNT(*) OVER (PARTITION BY x.POLICY_NO) policy_no_count
FROM YIP.YOUTH_POLICY x
LEFT JOIN
YIP.YOUTH_POLICY_AREA B
ON x.POLICY_NO = B.POLICY_NO
LEFT JOIN
YIP.YOUTH_SMALL_CATEGORY C
ON B.SMALL_CATEGORY_SID = C.SMALL_CATEGORY_SID
ORDER BY x.POLICY_NO);
我正在尝试选择A.POLICY_NO值是否重复超过18行,是否希望将C.SMALL_CATEGORY_TITLE值更改为“ZZ”,以及是否希望将B.SMALL_CATEGORY_SID值转换为空。这就是为什么在如下查询中进行2次选择的原因
SELECT DISTINCT
x.POLICY_NO,
CASE WHEN (policy_no_count > 17) THEN 'ZZ' ELSE C.SMALL_CATEGORY_TITLE END AS C.SMALL_CATEGORY_TITLE,
CASE WHEN (policy_no_count > 17) THEN NULL ELSE B.SMALL_CATEGORY_SID END AS B.SMALL_CATEGORY_SID,
x.POLICY_TITLE
FROM (SELECT x.*, B.*,C.* , COUNT(*) OVER (PARTITION BY x.POLICY_NO) policy_no_count
FROM YIP.YOUTH_POLICY x
LEFT JOIN
YIP.YOUTH_POLICY_AREA B
ON x.POLICY_NO = B.POLICY_NO
LEFT JOIN
YIP.YOUTH_SMALL_CATEGORY C
ON B.SMALL_CATEGORY_SID = C.SMALL_CATEGORY_SID
ORDER BY x.POLICY_NO);
如果我使用该查询,我得到SQL错误[42000]:JDBC-8006:缺少FROM关键字。¶第3行第80列的空错误。
我知道应该一步一步来解决,有没有办法选择具体栏目?
1条答案
按热度按时间5uzkadbs1#
这很可能是因为
SELECT x.*, B.*,C.*
-避免使用星号-显式命名所有需要的列,然后注意可能的重复列名;如果有,请使用列别名。例如,如果
select
(在子查询中)的计算结果为那么外部查询不知道您想要哪个
id
,因为两列的名称是id
(还有两个name
),所以您必须并且-在外部查询中-不仅选择
id
,而且例如选择x_id
。