希望将第二个查询的列连接到第一个查询,但出现错误,如“查询块的结果列数不正确”

xvw2m8pv  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(273)
SELECT
    ID, PRIM_EMAIL, SEC_EMAIL, PHONE 
FROM
    STUDENTS.RECORDS
WHERE 
    ID IN (SELECT ID FROM STUDENTS.INFO WHERE ROLL_NO = '554')

UNION

SELECT NAME 
FROM STUDENTS.INFO 
WHERE ROLL_NO = '554';

在这里 Roll_No 是一个用户插入的数据,所以现在我已经硬编码了。基本上是在 ROLL_NO 我把它们分类 STUDENTS_INFO 我从那里得到的table ID 基于此,我试图 PRIM_EMAIL , SEC_EMAIL , PHONESTUDENTS.RECORDS 同时匹配两个表的外键。除了当前的结果集,我还想有prov\u name列。
非常感谢您的帮助。谢谢您!

xdyibdwo

xdyibdwo1#

我怀疑你想把所有这些信息放在同一行,这意味着 join 而不是 union all :

select 
    r.ID,
    r.PRIM_EMAIL, 
    r.SEC_EMAIL,
    r.PHONE,
    r.NAME
from STUDENTS.RECORDS r
inner join STUDENTS.INFO i ON i.ID = r.ID
where I.ROLL_NO = '554';
xlpyo6sf

xlpyo6sf2#

我认为你错误的根源 query block has incorrect number of result columns 来自于试图将一个包含4列的表合并在一起( id, prim_email, sec_email, phone )带1列( name ).
从你的问题来看,我想知道你想要一张table id, prim_email, sec_email, phonestudents.records 以及 namestudents.info .
我认为下面使用cte的查询可能会(部分)得到最终结果。您可能需要重构以优化性能。

with s_records as ( select * from students.records ),

s_info as ( select * from students.info ),

joined as ( 

  select
    s_records.id,
    s_records.prim_email,
    s_records.sec_email,
    s_records.phone,
    s_info.name

  from s_records

  left join s_info 
       on s_records.roll_no = s_info.roll_no

  where roll_np = '554' )

select * from joined

总的来说,我认为 join 将是你解决方案的一部分而不是 union :-)

相关问题