Соедините два запроса sql бок о бок без общего столбца - PullRequest
0 голосов
/ 10 декабря 2010

Мне нужно объединить результаты двух запросов по горизонтали.Рассмотрим запрос ниже, который вернет две строки:

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 ]

2 голосов
/ 10 декабря 2010

Вы можете сделать это, присоединившись к 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 голосов
/ 13 декабря 2010

Большое спасибо за вашу помощь.

Но мне нужно немного сложнее. Я обновил предыдущий запрос, чтобы он был похож на приведенный ниже, вместо простого запроса, который я разместил до (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)

Я знаю, что приведенный выше запрос не имеет большого значения. Тем не менее, это похоже на то, что мне нужно на самом деле. Я не публикую исходный текст, поскольку это очень сложно, но если это можно сделать для этого запроса, я смогу повторить то же самое на исходный.

Спасибо,

Sharon

0 голосов
/ 10 декабря 2010

Вы можете ввести столбец искусственного соединения:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...