2012-02-09 25 views
1

我試圖在MySQL中使用通常被稱爲類表繼承(?)的對象進行建模。類表繼承:任何人都可以提出從子類/子表中選擇數據的方法嗎?

在這裏看到:http://martinfowler.com/eaaCatalog/classTableInheritance.html

基本上我有三個表:

Items (item_id,posX,posY,sort) 

Items_Text (item_id,text) 

Items_Image (item_id, url) 

當我選擇的數據我只是想:

item_id,posX,posY,sort,text 

OR

item_id,posX,posY,sort,url 

任何人都可以提出一個這樣做的方法?

我能想到的唯一方法就是根據Items表中額外的一列「類型」對其進行硬編碼,或者將其硬編碼到我不願意考慮的應用程序邏輯中。我想我希望使用一些複雜的(或其他)方法來使用我不熟悉的連接?

感謝,

回答

0

您可以使用左外連接,並檢查空結果所加入的ID列,例如:

select 
    i.item_id 
, i.posX 
, i.posY 
, i.sort 
, t.item_id 
, t.text 
, u.item_id 
, u.url 
from Items i 
left outer join Items_Text t on t.item_id=i.item_id 
left outer join Items_Image u on u.item_id=i.item_id 

當您檢查結果集那麼只有當該項目位於Items_Text時,您纔會在t.item_id中獲得非空值,並且僅當該項目位於Items_Image中時,纔會在u.item_id中獲得非空值。您可以使用此測試來確定類型,而無需顯式列。

相關問題