2010-12-10 2 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

В вашем первом запросе вы можете обратиться к столбцу из запроса 1 в запросе 2? Я знаю, что это вызовет ошибку, но есть ли способ сделать это? – 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) 

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

Спасибо,

Sharon

+0

Что ты в итоге делаешь, помнишь? – Mukus 2016-11-03 05:14:33

Смежные вопросы