2012-02-09 19 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中获得非空值。您可以使用此测试来确定类型,而无需显式列。

相关问题