【问题标题】:MySql: merge three tables togetherMySql:将三个表合并在一起
【发布时间】:2011-10-01 11:48:22
【问题描述】:

我想将三个表合并在一起,如下所示:

基本上,我想包括所有三个表 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 你是对的。谢谢,很好。你知道我如何对用户进行排序。我想我必须在这里使用 ORDER BY。

标签: mysql sql join


【解决方案1】:

如果您想查看每个用户的所有结果,则不需要组。否则它会隐藏一些行,并且每个用户只显示一个。

首先将 T1 右连接到 T2,而不是左连接到 T3。如果 T1 中的元素与 T3 中的元素没有连接,这是一种很好的做法,以防止显示 T£ 字段的 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'。再次感谢。
【解决方案2】:

摆脱“分组依据”部分。这应该可以解决您的问题。

【讨论】:

  • 非常感谢,这就是问题所在。它现在工作正常
【解决方案3】:

消除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;

【讨论】:

  • 谢谢,是的,这正是问题所在,它现在可以工作了。
猜你喜欢
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多