2010-12-10 82 views
0

我需要水平加入兩個查詢的結果。 考慮查詢下面將返回兩行:並列加入兩個sql查詢,沒有列公用

Select * 
    from Salary 
where sal > 10000 

上面的查詢的結果應該由側與查詢的結果下面這將再次返回兩個rows.Or我只是需要拼接被接合的邊這兩個結果集:

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 
+2

你能成爲什麼您希望的結果集的樣子,如果你不想交叉聯接更清晰? – 2010-12-10 11:25:39

回答

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

你可以通過這樣的加盟對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) 
+0

在您的第一個查詢中,您可以引用查詢2中查詢1的列嗎?我知道它會拋出一個錯誤,但有沒有辦法做到這一點? – Mukus 2016-11-03 05:15:40

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) 

我知道上面的查詢不會有太大的相關性。但是,這與我實際需要的類似。我沒有發佈原來的那個,因爲這非常複雜,但是如果這個查詢可以完成,那麼我將能夠在原始的一個上覆制相同的結果。

謝謝

沙龍

+0

你記得你最終做了什麼? – Mukus 2016-11-03 05:14:33