我有两张表,即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
答案 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)