繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM