你可以这样做:
select r.id, r.type, f.name
from
Registers r
inner join Foods f on f.id = r.item_id and r.type = 0
union all
select r.id, r.type, c.name
from
Registers r
inner join Recipes c on c.id = r.item_id and r.type = 1
但是您的表结构并不理想。首先,由于 r.item_id 可以包含来自两个表的 id,因此不可能添加强制引用完整性的约束。您需要一个触发器来检查它,这更复杂、更慢。
相反,我会选择反过来建立关系:
将 register_id 添加到 Foods and Recipes。然后,您可以像这样编写查询:
select r.id, r.type, f.name
from
Registers r
inner join Foods f on f.register_id = r.id
union all
select r.id, r.type, c.name
from
Registers r
inner join Recipes c on c.register_id = r.id
这几乎相同,但您不需要类型,它允许您进行适当的外键约束。