加入不同关系的同桌

问题描述 投票:1回答:1

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

我的结果应该是这样的:

+------------+----------------+-----------------+
| username   | Object         | Item            |
+------------+----------------+-----------------+
|  1001      | Object_name1   | Item_name1      |
|  1001      | NULL           | Item_name2      |
|  1001      | NULL           | Item_name3      |
|  1001      | NULL           | Item_name4      |
|  1001      | NULL           | Item_name5      |
|  1002      | NULL           | Item_name6      |
+------------+----------------+-----------------+
and so on..

我目前的查询得到的最好的:

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
+------------+----------------+-----------------+-----------------+
| username   | Object         | Item            | Item_1          |
+------------+----------------+-----------------+-----------------+
|  1001      | Object_name1   | Item_name1      | Item_name2      |
|  1001      | Object_name1   | Item_name1      | Item_name3      |
|  1001      | Object_name1   | Item_name1      | Item_name4      |
|  1001      | Object_name1   | Item_name1      | Item_name5      |
|  1002      | NULL           | NULL            | Item_name6      |
+------------+----------------+-----------------+-----------------+

我的架构:enter image description here,如你所见,它是不正确的。任何建议如何解决?

mysql sql jointable
1个回答
0
投票

对于与对象相关的项目,您可以使用两次连接,对于用户相关项目,可以使用一次连接

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 
© www.soinside.com 2019 - 2024. All rights reserved.