MySQL中的表连接

MySQL中的表连接,mysql,sql,join,Mysql,Sql,Join,我有两个表格,即学生和爱好,结构和记录如下: 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 ----

我有两个表格,即学生和爱好,结构和记录如下:

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

使用
distinct
关键字:

SELECT distinct a.Name
FROM Students
etc....
它消除了重复的行,因此每个名称只能得到一个

SELECT a.ID, a.Name
    FROM Students a
        LEFT JOIN Hobbies h
            ON a.ID = h.ID
    GROUP BY a.ID, a.Name
通过分组,你可以回答诸如“每个学生有多少爱好?”


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

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

这确实不是使用联接的方式

左键连接一个常量上的未引用表不会得到任何结果

你问的问题的答案是“使用一个独立的从句”:

…但真的,我很确定这不是你想做的

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

SELECT
    a.Name
FROM
    Students a
WHERE
    a.ID = <Student ID>;
选择
a、 名字
从…起
学生a
哪里
a、 ID=;
。。。作为参考:

SELECT DISTINCT
    a.ID,
    a.Name
FROM
    Students a
INNER JOIN
    Hobbies h ON h.ID = a.ID
WHERE
    h.Hobby = <Hobby Name>;
选择DISTINCT
a、 身份证,
a、 名字
从…起
学生a
内连接
h上的h.ID=a.ID
哪里
h、 爱好=;

此处未引用哪一个?选择中未引用嗜好表,因此嗜好表的左连接是残留的;但是,先生,如果我使用DISTINCT,那么,两个同名的学生就不会显示了吗?现在该怎么办问题是,你想做什么?您加入的嗜好表的意义是什么?你想看什么?你打算如何使用它?实际上,我有一个过滤器下拉列表,其中列出了所有爱好,因此当用户选择爱好并进行搜索时,会列出具有选定爱好的学生,因为如果选择了任何爱好,我会在查询中添加WHERE子句,但如果没有选择爱好,则没有WHERE子句,请阅读一篇SQL教程,例如:如果您只需要学生表中的两个名称,为什么要加入表?“从学生中选择名字”似乎符合您的目的。但是,先生,这会消除同名的学生?@sqlchild:然后包含一个元素(
ID
),使其唯一。我将修改我的答案。
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>;