首先,這不是我的設計,我沒有改變它的選項。我有三個表格定義了行動項目與事件和審計之間的關係。這些表中,以非常簡單的形式中,設置了這樣的:Oracle:是否可以根據列值選擇要連接的表?
ACTION_ITEMS
-------
ID SOURCE_ID SOURCE_TYPE
1 12345 INC
2 67890 AUD
INCIDENTS
-------
ID
12345
AUDITS
-------
ID
67890
的SOURCE_TYPE列指示該其他兩個表的是有關該行。通過爲事件和審計操作項目創建單獨的查詢,將這些查詢連接到適當的表,然後執行聯合,可以很容易地獲取所有記錄的詳細信息。
我想知道的是,如果可以根據列的值有條件地加入到表中。換句話說,這樣的事情,但實際工作:
SELECT
AI.*
,INC.*
,AUD.*
FROM ACTION_ITEMS AI
JOIN
CASE AI.SOURCE_TYPE
WHEN 'INC' THEN INCIDENTS INC ON (AI.SOURCE_ID = INCIDENTS.ID)
WHEN 'AUD' THEN AUDITS AUD ON (AI.SOURCE_ID = AUDITS.ID)
END;
**編輯澄清,我正在尋找來檢索所有表數據。
嗯......或者可能是兩個'INNER JOIN'子查詢的'UNION'? – Filburt
@Filburt OP在問題的第二段提到。 –
呃,我錯過了,因爲我直接跳到你的答案。仍然想知道他不喜歡'UNION'... – Filburt