的通用替代方式,我有一個表attach
巨大的數據集,它是一個臨時表,並通過SQL創建:如何編寫一個Oracle查詢作爲工會
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
我想有QUER y以獲得:
id number name item
1 X1 name1 X1
2 X2 name2 X2
3 X3 name3
4 X4 name4
正如你可以看到,返回的行添加新列這實際上從表attachment_map
了,那裏有三個impossibles:
1)。 attach
沒有物品。
2)。通過連接attachment_map
的列attach_id
來保存項目。
2)。通過連接到的列attach_id
來保存項目。
我寫了一個查詢,但表現不佳,慢慢執行,看起來是因爲聯合。每個人都可以用另一種方式說話,或者我可以如何改進它?感謝
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);
別名「我」指的是什麼(i.item)? – davek 2012-07-21 17:23:57
是不是這是一個左連接? – codingbiz 2012-07-21 17:25:52
不是一個完整的左連接,因爲正如我所提到的,有三個不可能獲得的項目值 – 2012-07-22 03:18:22