我有2个表,其名称是FIRST和USERS。在FIRST表中,我有USERID1,USERID2和USERID3列。和USERS表我保存了USERID的姓名和姓氏值。如果我加入表格;
SELECT f.userid1, f.userid2, f.userid3, u.name, u.surname
FROM users u, first f
WHERE f.userid1=u.userid AND f.userid2=u.userid AND f.userid3=u.userid
我想将此结果返回1行,如;
121314 name surname 131415 name surname 141516 name surname
FIRST表结果示例;
no no2 userid1 userid2 userid3 ...
7 100000545 121314 131415 141516 ....
USER TABLE
id name surname
121314 black smoke
131415 jack shephard
141516 john locke
我想结果像用户表,但我必须加入,因为即将到来的结果必须根据FIRST表中的记录
答案 0 :(得分:1)
通常,要在一行中检索结果,您需要使用聚合函数。您可以尝试根据您的要求调整以下查询:
WITH first AS
(
SELECT
7 AS no
,100000545 AS no2
,121314 AS userid1
,131415 AS userid2
,141516 AS userid3
FROM
dual
)
, users AS
(
SELECT
DECODE(LEVEL
,1,121314
,2,131415
,3,141516
) AS id
,DECODE(LEVEL
,1,'black'
,2,'jack'
,3,'john'
) AS name
,DECODE(LEVEL
,1,'smoke'
,2,'shephard'
,3,'locke'
) AS surname
FROM
dual
CONNECT BY LEVEL < 4
)
SELECT
TRIM(XMLAGG(XMLELEMENT(e, s.id||' '||s.name||' '||s.surname||' ')).EXTRACT('//text()').getClobVal()) AS one_row_result
FROM
first f
,users s
WHERE
s.id IN (f.userid1, f.userid2, f.userid3)
答案 1 :(得分:0)
不一定是关于plsql,而是一般的sql
在您的查询&#34; u.userid&#34;将永远是同一行中的一个字段。
因此,只要f.userid1,f.userid2,f.userid3不保持相同的值,您就不会获得任何结果。我认为你想要实现的是获得3个用户,其id存储在第一个表中,因此你必须引用&#34;用户&#34;表三次。
要获得示例中的行,查询将如下所示:
SELECT f.userid1, u_first.name , u_first.surname,
f.userid2, u_second.name, u_second.surname,
f.userid3, u_third.name, u_third.surname
FROM users u_first, users u_second, users u_third, first f
WHERE f.userid1=u_first.userid
AND f.userid2=u_second.userid
AND f.userid3=u_third.userid
有人肯定会在这里提供正确的加入。
修改强>
对于您的示例数据,请选择将结果
121314 black smoke 131415 jack shepard 141516 john locke
但是请注意,您没有指定第一个表中要获取此连接的行,因此如果来自User表的行可以满足这些条件,您将获得First表中每行的结果行(我希望你能正确设置约束)
如果您只想为一个特定的Field行获取一行,请添加
AND f.no=7
在查询结束时
如果您希望收到的输出是:
121314 black smoke
131415 jack shephard
141516 john locke
尝试:
SELECT f.userid1, u.name ,u.surname,
FROM users u, first f
WHERE f.userid1=u.userid
OR f.userid2=u.userid
OR f.userid3=u.userid
AND f.no=7
这是一种实际测试的好方法,是否所有具有这些ID的用户都存在于数据库中 但请记住,结果中的顺序与User表中的项目顺序相同,因此它不一定与f.first相同,然后是f.second,然后是f.third