列共通なしで2つのSQLクエリを並べて結合する

oracle sql
列共通なしで2つのSQLクエリを並べて結合する

2つのクエリの結果を水平方向に結合する必要があります。 2行を返す以下のクエリを検討してください。

Select *
  from Salary
 where sal > 10000

上記のクエリの結果は、下のクエリの結果と並べて結合される必要がありますが、これは再び2つの行を返します。または、2つの結果セットを連結する必要があります。

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

  0  0


ベストアンサー

これを行うには、次のように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)

2


人工的な結合列を導入できます:

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

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


タイトルとURLをコピーしました