我有2个数据库。我想编写一个查询,从两者中提取数据并将它们绑定到相同的结果中。
用户数据库:
id username group
1 steve group1
2 joe group1
3 tom group2
数据库:
id userid fieldname fieldresult
1 2 phone 867-5309
2 2 address 123 elm st
3 1 address 666 park avenue
如果我只想要史蒂夫的地址,我可以写:
select user.username, data.fieldresult from user, data where user.id = data.userid and data.fieldname = 'address' and user.username = 'steve';
结果将是:
username fieldresult
steve 666 park avenue
但是如果我想把乔的所有现场结果放在一行呢?这可以从查询本身做到,还是我必须在代码中处理?
基本上,我想看看:
username phone address
joe 867-5309 123 elm st
这是一厢情愿的想法吗?我甚至不需要“电话”和“地址”作为标题,只要我能得到相同结果的值。
注意:我正在使用现有数据库,这就是当前信息的存储方式。
编辑: 此外,我需要在更大的基础上这样做。我可以以相同的方式为整个组中的每个用户获取此信息,而不是通过用户名查询。
答案 0 :(得分:1)
尝试
select a.username,
b.fieldresult as phone,
c.fieldresult as address
from #user a
left join #data b on a.id=b.userid and b.fieldname='phone'
left join #data c on a.id=c.userid and c.fieldname='address'
where a.id = 2
答案 1 :(得分:1)
您可以尝试在datadb表中转动联系人信息,然后将其与用户
连接select * from userdb..[user] u join
(
select userid,phone, address from
(
select userid,fieldname,fieldresult from datadb..data
) as a pivot
(
max(fieldresult) for fieldname in (phone, address)
) piv ) as a
on a.userid = u.id
这将产生如下内容。
id username group userid phone address
1 steve group1 1 NULL park aven
2 joe group1 2 867-5309 123 elm st
答案 2 :(得分:-1)
我使用的两个表是user_和data。 希望,这可能对你有帮助
DECLARE
user_name user_.username%type:='joe';
phone_no data.fieldresult%type;
full_address data.fieldresult%type;
user_id user_.id%type;
CURSOR c_name IS select * from data;
result c_name%rowtype;
BEGIN
select id into user_id from user_ where username=user_name;
open c_name;
LOOP
fetch c_name into result;
IF ( result.userid=user_id AND result.fieldname='phone') THEN
phone_no:=result.fieldresult;
END IF;
IF(result.userid=user_id AND result.fieldname='address') THEN
full_address:=result.fieldresult;
END IF;
EXIT when c_name%NOTFOUND;
END LOOP;
close c_name;
dbms_output.put_line(user_name||' '||phone_no||' '||full_address);
END;
/
输出:joe 867-5309 123 elm st