我正在尝试使用通常(?)称为类表继承的方法在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”进行硬编码,或者将其硬编码到我不想考虑的应用程序逻辑中的其他方法。我想我希望使用一些我不熟悉的连接的复杂(或其他)方法?
谢谢,
肯
答案 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
时。您可以使用此测试来确定类型,而无需显式列。