[英]Join two sql queries side by side with no column common
我需要水平加入两个查询的结果。 考虑下面的查询,该查询将返回两行:
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
你可以通过像这样加入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)
你可以引入一个人工连接列:
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
非常感谢您的帮助。
但我需要的是有点复杂。 我已将上一个查询更新为有点像下面而不是我之前发布的简单查询(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)
我知道上面的查询没有太大的意义。 但是,这与我实际需要的类似。 我没有发布原始版本,因为它非常复杂,但如果可以对此查询执行此操作,那么我也可以在原始查询上复制相同内容。
谢谢,
沙龙
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.