mysql - 如何根据主表的字段值连接到 2 个不同的表?

标签 mysql sql join

所以我有 3 个表,分别名为 menusproductscategories

menus 表有 id,item_type 可以是 product|category 和 item_id。

我想做的是当 menu item_type = product 时,将其与产品表 ON products.id = menu.item_id 连接并与 当 item_type = category 时的类别

这是我当前的查询:

SELECT m.* FROM menus m 
LEFT JOIN products p ON p.id = m.item_id AND m.item_type = 'product' 
LEFT JOIN categories c ON c.id = m.item_id AND m.item_type = 'category'

虽然我没有看到每个菜单附加的任何产品或类别数据,但查询有效。

我是不是漏掉了什么?谢谢。

最佳答案

您需要SELECT 您想要的列。您只需从 menus 表中选择列,这就是您得到的全部内容。

我建议从其他两个表中选择列,但使用 COALESCE() 组合它们:

SELECT m.*,
       COALESCE(p.name, c.name) as name,  -- or whatever the columns are
       -- repeat for additional columns that you want
FROM menus m LEFT JOIN
     products p
     ON p.id = m.item_id AND m.item_type = 'product' LEFT JOIN
     categories c
     ON c.id = m.item_id AND m.item_type = 'category'

关于mysql - 如何根据主表的字段值连接到 2 个不同的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56746160/

相关文章:

mysql - 为什么 LEFT JOIN 会破坏我的 MySQL 查询?

php - sql更新语句失败

sql - Oracle SQL - 将主键添加到表

php - Pdo 未定义索引和无效参数号

sql - 跟踪表中的更改

MySQL - 对连接表进行 AND 查询

mysql - 将两个查询的结果按列组合,无需任何连接条件

php - 通过ajax同时在多个数据库中执行更新查询

php - 在每个大写单词前添加 <br>

mysql - Amazon RDS 与使用 MySQL 的 EC2 各自的优势/限制是什么?