我尝试使用本教程实现它: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
答案 0 :(得分:0)
仅获取使用SELECT语句所需的名称和日期(http://www.w3schools.com/sql/sql_select.asp)
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 |
由于你有两个人叫迈克,他们的日期相同,如果你加入这些表,你会得到:
在这里输入代码
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 BY
和MAX
(http://www.w3schools.com/sql/sql_groupby.asp)
(http://www.w3schools.com/sql/sql_func_max.asp)