0

Oracle 10g に次のテーブルがあります。

Table1
Name  Status
a         closed
b         live
c         live

Table2
Name  Status
a         final
b         live
c         live

両方のテーブルに主キーがありません。両方のテーブルをループして行/列を比較せずに同一の行を返すクエリを作成しようとしています。ステータス列が異なる場合は、Table2 の行が優先されます。

したがって、上記の例では、クエリは次のように返されます。

Name   Status
a         final
b         live
c         live
4

2 に答える 2

3

両方のテーブルに主キーがないとおっしゃっていたTable1ので、 、Table2、または両方に行が存在する可能性があると思います。以下のクエリは、 と を使用Common Table ExpressionWindowing functionてそのような結果を取得します。

WITH unionTable
AS
(
    SELECT  Name, Status, 1 AS ordr FROM Table1
    UNION 
    SELECT  Name, Status, 2 AS ordr FROM Table2
),
ranks 
AS
(
    SELECT  Name, Status,
            ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY ordr DESC) rn
    FROM    unionTable
)
SELECT  Name, Status
FROM    ranks
WHERE   rn = 1
于 2013-03-11T14:04:05.597 に答える
1

このようなもの?

SELECT table1.Name, table2.Status
FROM table1
INNER JOIN table2 ON table1.Name = table2.Name

常に返すtable2.Statusことで、それらが同じ場合と異なる場合の両方をカバーしました (本質的に、 の値が何であるかは問題ではありませんtable1.Status)。

于 2013-03-11T14:04:13.967 に答える