【问题标题】:Inner Join duplicates内连接重复
【发布时间】:2014-07-29 18:23:58
【问题描述】:

我已尝试通过本教程来实现它:http://www.w3schools.com/sql/sql_join_inner.asp 它正在工作,但我得到了重复的条目。我有 3 张桌子,我只想得到 2 列。一个是姓名,一个是日期。对于 1 名称是表中的更多日期。我希望每个名字只有 1 个日期,仅限今天。

编辑: 结果现在看起来像这样:

Name    Date
----    -----------
XY      2014-07-25
XY      2014-07-26
XY      2014-07-29
Z       2014-07-09
Z       2014-07-29

我想得到什么:

Name  Date
----  --------
XY    2014-07-29
Z     2014-07-29

【问题讨论】:

  • 您是否尝试过使用分组?我建议查找GROUP BYdev.mysql.com/doc/refman/5.0/en/group-by-functions.html
  • 我猜我们猜不出你的桌子上有什么,你试图让这些重复的东西正确吗?所以把你的表结构放在你的问题上加上你的 sql 命令,这样我们就可以在这里看到它。链接可能会损坏,您的问题将毫无用处
  • 分组很好,但我“丢失”了一些记录,所以有时是我需要的记录。
  • SO 不是 w3 的粉丝。不知道 w3 对 SO 的感觉如何
  • 您只想要一个日期的记录吗?使用 WHERE 子句。你想要最新的吗?使用 max() + GROUP BY。您是否想要一个依赖于复杂逻辑的逻辑(您可能需要在应用程序逻辑中进行一些过滤。请输入完整的表结构、您想要回答的确切问题和 SQL 语句。

标签: php mysql sql


【解决方案1】:
  1. 要仅获取您需要的名称和日期,请使用 SELECT 语句 (http://www.w3schools.com/sql/sql_select.asp)

  2. INNER JOIN 不会删除重复项。为此,您需要使用 DISTINCT 语句 (http://www.w3schools.com/sql/sql_distinct.asp)

您的问题示例(注意:表格是假的,可能没有意义,它们只是为了示例)

TABLE1         TABLE2
|id | date |   |id | name | age |
| 1 | 2010 |   | 1 | mike |  5  |
| 2 | 2010 |   | 2 | mike |  6  |

由于您有 2 个叫 mike 的人有相同的日期,如果您加入表格,您将获得:

在此处输入代码

SELECT t1.id, t1.date, t2.name, t2.age
FROM TABLE1 as t1
INNER JOIN TABLE2 as t2 ON t1.id = t2.id

TABLE JOINED
|id | date | name | age |
| 1 | 2010 | mike |  5  |
| 2 | 2010 | mike |  6  |

如果您只选择日期和姓名,您将获得相同的行,但没有年龄和 ID。

SELECT t1.id, t1.date, t2.name, t2.age
FROM TABLE1 as t1
INNER JOIN TABLE2 as t2 ON t1.id = t2.id

TABLE JOINED / FILTERED
| date | name |
| 2010 | mike |
| 2010 | mike |

你可以看到重复的行。

独特的声明就是为此。

w3schools 教程可能有点难以理解(没有按清晰的步骤组织)。我建议您在谷歌上搜索另一个。

=========

编辑:你改变了问题。

为此,您需要使用 GROP BYMAX (http://www.w3schools.com/sql/sql_groupby.asp) (http://www.w3schools.com/sql/sql_func_max.asp)

【讨论】:

  • 我很有趣你不是指 WERE 语句来过滤掉行。 (w3schools.com/sql/sql_where.asp) 如果您指的是那个,请在询问其他任何内容之前阅读完整的教程。
  • 此表中还有其他列。如果我最大化日期,我想我会再次丢失其他列的行。
  • 你到底想要什么??您想通过查询回答什么问题?另外,表的架构是什么?我想你可能是以下情况:stackoverflow.com/questions/17814961/…
猜你喜欢
  • 1970-01-01
  • 2012-06-18
  • 2012-09-24
  • 2018-03-06
  • 2017-10-22
  • 2019-03-27
  • 2017-07-31
  • 2013-04-18
  • 2018-06-14
相关资源
最近更新 更多