并排加入两个sql查询,没有列常见

时间:2010-12-10 11:19:33

标签: sql oracle

我需要水平加入两个查询的结果。 考虑下面的查询将返回两行:

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

3 个答案:

答案 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)

我知道上面的查询没有多大关系。但是,这与我实际需要的相似。我没有发布原始版本,因为它非常复杂,但如果可以对此查询执行此操作,那么我也可以在原始查询上复制相同内容。

谢谢,

沙龙