私は巨大なデータセットを持つテーブルを持っていますattach
、それは一時的なテーブルであり、SQLによって作成されました:
id number name
1 X1 name1
2 X2 name2
3 X3 name3
4 X4 name4
テーブルattachment_map
id item attach_id file_id versionid
1 X1 1 100 0
2 X2 0 0 1
テーブルversion
id attach_id
1 2
取得するクエリが必要です:
id number name item
1 X1 name1 X1
2 X2 name2 X2
3 X3 name3
4 X4 name4
ご覧のとおり、戻り行には実際にテーブルから取得した新しい列が追加されattachment_map
ています。3つの不可能な点があります。
1)。attach
アイテムがありません。
attach_id
2)。の列に接続してアイテムを持っていますattachment_map
。
attach_id
2)。の列に接続してアイテムを持っていますversion
。
クエリを作成しましたが、パフォーマンスが低く、実行が遅く、結合が原因のようです。誰もが別の方法を教えてもらえますか、それとも私がそれを改善する方法はありますか?ありがとう
WITH tb AS
(SELECT t.*,
i.item
FROM attach t,
attachment_map am,
version v
WHERE (am.attach_id = t.attachid
OR (am.file_id = 0
AND am.version_id = v.id))
)
SELECT * FROM tb
UNION
SELECT tb.*, NULL FROM tb, attach WHERE tp.id NOT IN (attach.id);