内部连接重复

时间:2014-07-29 18:23:59

标签: php mysql sql

我尝试使用本教程实现它:http://www.w3schools.com/sql/sql_join_inner.asp它正在运行,但我得到重复的条目。我有3个表,我想只有2列。一个用于名称,一个用于日期。对于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

1 个答案:

答案 0 :(得分:0)

  1. 仅获取使用SELECT语句所需的名称和日期(http://www.w3schools.com/sql/sql_select.asp

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

  3. 你的问题的例子(注意:表是假的,可能没有意义,他们只是为了这个例子)

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

    由于你有两个人叫迈克,他们的日期相同,如果你加入这些表,你会得到:

    在这里输入代码

    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 BYMAXhttp://www.w3schools.com/sql/sql_groupby.asp) (http://www.w3schools.com/sql/sql_func_max.asp