类表继承:任何人都可以建议从子类/子表中选择数据的方法吗?

时间:2012-02-09 18:11:05

标签: mysql database

我正在尝试使用通常(?)称为类表继承的方法在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表中的附加列“type”进行硬编码,或者将其硬编码到我不想考虑的应用程序逻辑中的其他方法。我想我希望使用一些我不熟悉的连接的复杂(或其他)方法?

谢谢,

1 个答案:

答案 0 :(得分:0)

您可以使用左外连接,并在连接的ID列中检查null的结果,如下所示:

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

当你检查你得到的结果集时,只有当项目在t.item_id时,你才会在Items_Text中获得非空,而在u.item_id中则为非空仅当项目位于Items_Image时。您可以使用此测试来确定类型,而无需显式列。