我想这是一个非常常见的问题,可能会重复,但是我不知道如何搜索。这是我的场景:我有3个表:寄存器,食物和食谱。表结构简化:
寄存器
id | item_id |类型(0种食物| 1种食谱)
(item_id可以是食品ID或食谱ID)
食品类
id |名称|重量
菜谱
id |名称| num_ingredients
我要查询的寄存器表并根据类型字段为0或1返回食物或食谱名称(以及每个表中的某些特定字段,例如食物中的重量和食谱中的num_ingredients)。
如果表结构不是最好的,我将感谢帮助我找到最好的解决方案。
非常感谢。
最佳答案
您需要将两个详细信息表与UNION
组合在一起,然后使用JOIN
和ID
字段将它们与Registers表组合在一起。
SELECT item_id, name, data
FROM Registers r
JOIN (SELECT 0 type, id, name, weight as data
FROM Foods
UNION
SELECT 1 type, id, name, num_ingredients as data) x
ON r.item_id = x.id AND r.type = x.type
但是,GolezTroi的答案可能是在
type
之后执行UNION
的答案,因为它在加入之前不会创建大的临时表。