简体   繁体   English

如何从 Oracle SQL 中的三个不同表中获取 select 特定列

[英]how to select specific columns from three different tables in Oracle SQL

I am trying to select values from three different tables.我正在尝试从三个不同的表中获取 select 值。 When I select all columns it works well, but if I select specific column, the SQL Error [42000]: JDBC-8027:Column name is ambiguous.当我 select 所有列时它运行良好,但如果我 select 特定列,则 SQL 错误 [42000]:JDBC-8027:列名不明确。 appear.出现。

this is the query that selected all that works well这是选择所有运行良好的查询

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);

and this is the error query这是错误查询

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);      

I am trying to select if A.POLICY_NO values duplicate rows more than 18, want to change C.SMALL_CATEGORY_TITLE values to "ZZ" and also want to cahge B.SMALL_CATEGORY_SID values to null. that is why make 2 select in query like this我正在尝试 select 如果 A.POLICY_NO 值重复行超过 18,想将 C.SMALL_CATEGORY_TITLE 值更改为“ZZ”并且还想将 B.SMALL_CATEGORY_SID 值更改为 null。这就是为什么要像这样查询 2 8812742811008

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);  

If i use that query, I got SQL Error [42000]: JDBC-8006:Missing FROM keyword.如果我使用该查询,我会收到 SQL 错误 [42000]:JDBC-8006:缺少 FROM 关键字。 ¶at line 3, column 80 of null error.. ¶在第 3 行,null 错误的第 80 列..

I know I should solve it step by step.我知道我应该逐步解决它。 Is there any way to select specific columns? select具体列有什么办法吗?

That's most probably because of SELECT x.*, B.*,C.* - avoid asterisks - explicitly name all columns you need, and then pay attention to possible duplicate column names;这很可能是因为SELECT x.*, B.*,C.* - 避免星号 - 明确命名您需要的所有列,然后注意可能重复的列名; if you have them, use column aliases .如果有,请使用列别名

For example, if that select (which is in a subquery) evaluates to例如,如果select (在子查询中)计算为

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

then outer query doesn't know which id you want as two columns are named id (and also two name s), so you'd have to然后外部查询不知道你想要哪个id因为两列被命名为id (还有两个name s),所以你必须

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

and - in outer query - select not just id , but eg x_id .并且 - 在外部查询中 - select 不仅是id ,还有例如x_id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM