我需要水平加入两个查询的结果。 考虑下面的查询将返回两行:
Select *
from Salary
where sal > 10000
上面的查询结果应该与下面的查询结果并排连接,这将再次返回两行。或者我需要连接两个结果集:
Select 'xyz' from dual
union
Select 'abc' from dual
请建议如何执行此操作,因为我尝试使用下面的查询执行此操作,但它返回了一个笛卡尔积:
Select *
from (Select *
from salary
where sal > 10000) TEMP1,
(Select 'xyz' from dual
union
Select 'abc' from dual) TEMP2
答案 0 :(得分:2)
你可以通过加入rownum这样做:
SELECT *
FROM
(SELECT view_name, rownum AS r FROM all_views WHERE rownum <=10)
FULL OUTER JOIN (SELECT table_name, rownum AS r FROM all_tables WHERE rownum <=10) USING (r)
在你的情况下,这看起来像(未经测试):
Select * from
(Select salary.*, rownum AS r from salary where sal>10000) TEMP1
FULL OUTER JOIN
(SELECT temp2.*, rownum r FROM
(Select 'xyz' from dual
union
Select 'abc' from dual) TEMP2)
USING (r)
答案 1 :(得分:0)
您可以引入人工连接列:
SELECT *
FROM (SELECT s.*, ROWNUM ID FROM Salary s WHERE sal > 10000) q1
JOIN (SELECT 'xyz' col1, 1 ID
FROM dual
UNION
SELECT 'abc' col1, 2 ID FROM dual) q2 ON q1.id = q2.id
答案 2 :(得分:0)
非常感谢你的帮助。
但我需要的是有点复杂。我已将上一个查询更新为有点像下面而不是我在(SELECT * FROM Salary WHERE sal > 10000)
之前发布的简单查询:
SELECT name, sal, address
FROM (SELECT e1.name, s1.sal, s1.grade, s2.address FROM Emp e1, salary s1,
(Select empcode, address FROM Address WHERE empcode LIKE 'NY%') s2
WHERE e1.hiredate =201001
AND s1.sal>10000)
我知道上面的查询没有多大关系。但是,这与我实际需要的相似。我没有发布原始版本,因为它非常复杂,但如果可以对此查询执行此操作,那么我也可以在原始查询上复制相同内容。
谢谢,
沙龙