在MySQL中加入表

时间:2011-09-07 15:24:46

标签: mysql sql join

我有两张表,即Student&具有以下结构和记录的爱好:

ID,Name
-----------
9,Peter

10,Steve


ID,Hobby
-----------------
9,dancing

9,singing

10,learning

我想加入这些表并从表格学生那里获得一个独特的记录。 我现在正在这样做,这会产生重复的记录:

SELECT a.Name
FROM Students a
LEFT JOIN Hobbies h ON a.ID =h.ID

这给出了:

Name
----------
Peter
Peter
Steve

我有理由,这是因为,表爱好有两个ID = 9的记录,这就是为什么重复记录的演变,但如何检索单个记录?请帮忙。

我想要这个:

Name
-----------
Peter 
Steve

4 个答案:

答案 0 :(得分:2)

SELECT a.ID, a.Name
    FROM Students a
        LEFT JOIN Hobbies h
            ON a.ID = h.ID
    GROUP BY a.ID, a.Name

通过GROUP BY,您可以回答诸如“每个学生有多少爱好?”之类的问题。

SELECT a.ID, a.Name, COUNT(*) AS Number_of_Hobbies
    FROM Students a
        LEFT JOIN Hobbies h
            ON a.ID = h.ID
    GROUP BY a.ID, a.Name

答案 1 :(得分:1)

这实际上不是应该使用JOIN的方式。

在一个常量上加入一个未引用的表会让你一无所获。

你问的问题的答案是“使用DISTINCT子句”:

SELECT DISTINCT a.Name FROM Students a LEFT JOIN Hobbies h ON a.ID = 9

......但实际上,我很确定这不是你想要做的。

根据评论,我相信OP的意图是这样的:

SELECT
    a.Name
FROM
    Students a
WHERE
    a.ID = <Student ID>;

......并且,对于爱好参考:

SELECT DISTINCT
    a.ID,
    a.Name
FROM
    Students a
INNER JOIN
    Hobbies h ON h.ID = a.ID
WHERE
    h.Hobby = <Hobby Name>;

答案 2 :(得分:0)

使用distinct关键字:

SELECT distinct a.Name
FROM Students
etc....

它消除了重复的行,因此您只能获得每个名称中的一个。

答案 3 :(得分:0)

你得到重复,因为彼得有2个爱好。如果您希望每个用户使用一条记录,请执行以下操作:

select * from Student where Id in (
Select DISTINCT Id from HobbY)