2

ビューのすべての行に一意の識別子を作成しようとしています。私が持っているビューは多くのテーブルを結合しているため、どのテーブルの主キーも行を識別するのに役立ちません。

Google検索を行うと、rowidを使用してこれを達成できるように見えますか? しかし、ビューの行 ID を参照する方法がわかりません。以下は、rowid がどのように機能するかを想像した例ですが、rowid に特定のテーブルを指定していないため、明らかに「あいまいな列」エラーで失敗します。

元:


    with v_someTable (select...),
      v_anotherTable as (select blah, id from v_someTable where...),
      v_yetAnotherTable as (select foo, id from v_someTable where...)
    select distinct rowid, rt.key, v1.blah, v2.foo
    from realTable rt 
      left join v_anotherTable v1 on v1.id=rt.id 
      left join v_yetAnotherTable v2 on v2.id=rt.id

ストアド プロシージャではなく、クエリでこれを実行しようとしています。どんな助けでも大歓迎です!

ありがとう!

4

5 に答える 5

6

私の理解では、arowidは結果セットの行ではなく、物理テーブルの行を参照します(これは事実上ビューとは何かです)。

各行の一意の識別子を取得するには、何らかの方法で結合しているテーブルの主キーを組み合わせる必要があります。

于 2011-12-07T14:27:34.997 に答える
4

すべてのテーブルに主主キーがない場合は、個々のテーブルから行 ID を選択して連結できます。

SELECT rt.rowid||v1.rowid||v2.rowid as uniqueid
FROM ......
于 2011-12-07T14:51:30.713 に答える
0

この質問にはしばらくの間回答がありますが、主キーを連結するときは注意してください。たとえば、持ってkey1 = 23 and key2 = 45 いてそれを連結すると2345、キーがだったの23 and 45か、それともだったのかは明確ではありません2 and 345

(23,45 -> 23_45)どのキーにも使用できない区切り文字を使用してください (すべてのキーが数値であるとは限りません)。または、可能な最大長までキーを埋めます(23,45 -> 00230045 (for key1 and key2 NUMBER(4,0)))

また、Oracle の機能 (すべての DB がこれを処理できるわけではありません) にも注意してください。複数の列に対して主キーと外部キーを定義すると、より高速になり、連結キーを分割することなくクリーン結合の可能性が広がります。

于 2014-10-13T11:31:51.367 に答える