MySQL:将三个表合并在一起

8
我希望将三个表格合并成如下所示的结果表格:

merge three tables T1, T2 and T3 together

我想要包含来自T1、T2和T3的所有项目,并将它们合并为结果表格中所示。我尝试了以下代码:
SELECT T1.user, T2.tid, T2.name, T3.type, T1.mid
FROM T1
LEFT JOIN T2 ON T1.mid = T2.mid
LEFT JOIN T3 ON T2.tid = T3.tid
GROUP BY T1.user;

但似乎并没有起作用。它只显示唯一值的结果。在结果中,如果userjohny,它只会显示第一个值,并忽略第二个值,尽管它应该在结果表中。

我是否遗漏了什么?


将您的标签更改为“join”,因为“merge-table”不够清晰。 - Michael Mior
@Michael,你说得对。谢谢,没问题。你知道我怎么可以对用户进行排序吗?我猜我必须在这里使用 ORDER BY。 - Johnydep
3个回答

6
组别不是必须的,如果您想查看每个用户的所有结果,则无需使用组别。否则,它将隐藏一些行并仅显示每个用户的一个结果。
先将T1右连接到T2,然后再左连接到T3。如果T1中有元素与T3中的元素没有连接,则这是一个好习惯,可以避免在T3字段上显示NULL结果。
SELECT T1.user, T2.tid, T2.name, T3.type, T1.mid
FROM T1
RIGHT JOIN T2 ON T1.mid = T2.mid
LEFT JOIN T3 ON T2.tid = T3.tid;

是的,使用RIGHT JOIN更好。因为我曾经遇到过这个问题,并且在上面的查询中还使用了WHERE和T2.tid!= 'NULL'。再次感谢。 - Johnydep

5
去掉“Group By”部分即可解决您的问题。

非常感谢,这就是问题所在。现在它正常工作了。 - Johnydep

4
消除GROUP BY。在这个查询中没有必要使用它。
SELECT T1.user, T2.tid, T2.name, T3.type, T1.mid
FROM T1
LEFT JOIN T2 ON T1.mid = T2.mid
LEFT JOIN T3 ON T2.tid = T3.tid;

谢谢,是的,那正是问题所在,现在它可以工作了。 - Johnydep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接