我想这是一个非常常见的问题,可能会重复,但是我不知道如何搜索。这是我的场景:我有3个表:寄存器,食物和食谱。表结构简化:

寄存器

id | item_id |类型(0种食物| 1种食谱)

(item_id可以是食品ID或食谱ID)

食品类

id |名称|重量

菜谱

id |名称| num_ingredients

我要查询的寄存器表并根据类型字段为0或1返回食物或食谱名称(以及每个表中的某些特定字段,例如食物中的重量和食谱中的num_ingredients)。

如果表结构不是最好的,我将感谢帮助我找到最好的解决方案。
非常感谢。

最佳答案

您需要将两个详细信息表与UNION组合在一起,然后使用JOINID字段将它们与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的答案,因为它在加入之前不会创建大的临时表。

10-05 20:28
查看更多