【问题标题】:joining same table on different relations在不同的关系上加入同一张表
【发布时间】:2019-08-27 01:42:27
【问题描述】:

我有 3 张桌子。用户、对象和项目。用户可以有很多对象,对象可以有很多项。此外,用户可以拥有许多项目。我正在为这些表格做报告。

我的结果应该是这样的:

+------------+----------------+-----------------+ |用户名 |对象 |项目 | +------------+----------------+-----------------+ | 1001 |对象名称1 |项目名称1 | | 1001 |空 |项目名称2 | | 1001 |空 |物品名称3 | | 1001 |空 |物品名称4 | | 1001 |空 |物品名称5 | | 1002 |空 |物品名称6 | +------------+----------------+-----------------+ 等等..

我当前查询的最佳结果:

SELECT u.username, o.name as object, i.name as item, i1.name as item_1
FROM users as u
LEFT JOIN object_user as ou on ou.user_id = u.id
LEFT JOIN objects as o on o.id = ou.object_id
LEFT JOIN object_items as oi on oi.object_id = o.id
LEFT JOIN items as i on i.id = oi.item_id
LEFT JOIN item_user as iu on iu.user_id = u.id
LEFT JOIN items as i1 on i1 = iu.item_id
+------------+----------------+-----------------+- ----------------+ |用户名 |对象 |项目 |项目_1 | +------------+----------------+-----------------+- ----------------+ | 1001 |对象名称1 |项目名称1 |项目名称2 | | 1001 |对象名称1 |项目名称1 |物品名称3 | | 1001 |对象名称1 |项目名称1 |物品名称4 | | 1001 |对象名称1 |项目名称1 |物品名称5 | | 1002 |空 |空 |物品名称6 | +------------+----------------+-----------------+- ----------------+

我的架构: 而且,如您所见,这是不正确的。有什么解决方法的建议吗?

【问题讨论】:

  • 我们也需要表格数据来获得结果。
  • 我添加了数据库架构

标签: mysql sql jointable


【解决方案1】:

您可以对项目使用两次连接,第一次用于对象相关项目,另一次用于用户关联项目

SELECT u.username, o.name as object, oi.name as oi_item_name, ui.name as ui_item_name
FROM users u
LEFT JOIN objects o on o.id = u.object_id 
LEFT JOIN items  oi on o.item_id  = oi.id
LEFT JOIN items ui on u.item_id  = ui.id 

【讨论】:

    猜你喜欢
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多