如何在Oracle SQL中从三个不同的表中选择特定列

hs1rzwqc  于 2023-01-30  发布在  Oracle
关注(0)|答案(1)|浏览(162)

我尝试从三个不同的表中选择值。当我选择所有列时,它运行良好,但如果我选择特定列,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列的空错误。
我知道应该一步一步来解决,有没有办法选择具体栏目?

5uzkadbs

5uzkadbs1#

这很可能是因为SELECT x.*, B.*,C.*-避免使用星号-显式命名所有需要的列,然后注意可能的重复列名;如果有,请使用列别名
例如,如果select(在子查询中)的计算结果为

select x.id, x.name, b.id, b.name

那么外部查询不知道您想要哪个id,因为两列的名称是id(还有两个name),所以您必须

select x.id   as x_id,
       x.name as x_name,
       b.id   as b_id,
       b.name as b_name
from ...

并且-在外部查询中-不仅选择id,而且例如选择x_id

相关问题