Mysql 仅用于选择两个主题的复杂联接
我正在MySQL中做一个项目。我有一个关于加入Mysql 仅用于选择两个主题的复杂联接,mysql,sql,join,Mysql,Sql,Join,我正在MySQL中做一个项目。我有一个关于加入的问题 +---+-----------+-----------+ |id | name | elective | +---+-----------+-----------+ | 1 | Jone | Math | | 2 | Jane | Math | | 3 | Doe | Math | | 4 | Bloggs | Math | | 5 | Peter
的问题
+---+-----------+-----------+
|id | name | elective |
+---+-----------+-----------+
| 1 | Jone | Math |
| 2 | Jane | Math |
| 3 | Doe | Math |
| 4 | Bloggs | Math |
| 5 | Peter | Math |
| 6 | Chris | Math |
| 7 | Mark | Math |
| 3 | Doe | Physics |
| 4 | Bloggs | Physics |
| 5 | Peter | Physics |
| 6 | Chris | Physics |
| 7 | Mark | Physics |
| 5 | Peter | Chemistry |
| 6 | Chris | Chemistry |
| 7 | Mark | Chemistry |
+---+-----------+-----------+
在上表中,很少有人选择了两个以上的科目,很少有人选择了两个以上的科目。其他人只选择了一个主题
但我只想显示第二个,即只学习过两门课程的人。这是我想使用内部联接得到的
SELECT id, name, COUNT(elective) FROM table GROUP BY id, name HAVING COUNT(elective) = 2
仅使用连接
如请求的OP:
select t1.id, t1.name
from tablename t1
inner join tablename t2 on t2.id = t1.id and t2.name = t1.name and t2.name <> t1.name
left outer join tablename t3 on t3.id = t2.id and t3.name <> t1.name and t3.name <> t2.name
where t3.name is null
选择t1.id,t1.name
来自表名t1
t2.id=t1.id和t2.name=t1.name和t2.name t1.name上的内部联接表名t2
t3.id=t2.id和t3.name t1.name和t3.name t2.name上的左外联接表名t3
其中t3.name为空
表t1
和t2
为同一id/人
选择两种不同的选修课
。表t3
将选择另一个选项
。当我在where
子句中输入我希望t3.name
为NULL
时,这意味着它不存在第三个与先前选择的选项不同的选项
如果存在第三个名称,where
子句将删除那些名称
两个内部联接
用于选择
至少两个不同的选修课
仅使用连接
如请求的OP:
select t1.id, t1.name
from tablename t1
inner join tablename t2 on t2.id = t1.id and t2.name = t1.name and t2.name <> t1.name
left outer join tablename t3 on t3.id = t2.id and t3.name <> t1.name and t3.name <> t2.name
where t3.name is null
选择t1.id,t1.name
来自表名t1
t2.id=t1.id和t2.name=t1.name和t2.name t1.name上的内部联接表名t2
t3.id=t2.id和t3.name t1.name和t3.name t2.name上的左外联接表名t3
其中t3.name为空
表t1
和t2
为同一id/人
选择两种不同的选修课
。表t3
将选择另一个选项
。当我在where
子句中输入我希望t3.name
为NULL
时,这意味着它不存在第三个与先前选择的选项不同的选项
如果存在第三个名称,where
子句将删除那些名称
两个内部连接
存在于选择
至少两个不同的选修课
为什么有人会破坏我的一个好编辑?现在看起来很糟糕。请修复表结构。数据可以用多种方式解释:(为什么有人会破坏我的编辑?现在看起来很糟糕。请修复表结构。数据可以用多种方式解释:(好吧,这是制作表的人的问题,它不符合DB结构的3级,应该立即重新考虑。它显然应该只包含个人id、主题id
,并且有外键。你的比我的更不正确,但我得到了缺点,因为我的声誉较低。似乎公平:/o你认为呢对于我的新查询:PWell,这是制作表的人的问题,它不符合DB结构的第3类,应该立即重新考虑。它显然应该只包含个人id、主题id
,并且有外键。你的比我的更不正确,但我得到了缺点,因为我的声誉较低。似乎公平:/whaI don’你不认为我的新查询是正确的,但你的查询也不起作用,因为可能有两个人同名。很高兴我们一致认为表结构很糟糕,需要修复。顺便说一下,只需在表中放入另一个6 Mark Math
,你的查询就会被销毁:)您需要根据id而不是人名进行分组。这毫无意义。现在我明白了,您的查询是正确的。他对同一个人有相同的id。@balamurugan为什么要这样做?恕我冒犯,但您的查询也不起作用,因为可以有两个同名的人。很高兴我们一致认为表结构非常糟糕nd需要修复。顺便说一句,只需在表中放入另一个6马克数学
,您的查询就会被销毁:)您需要根据id而不是人名进行分组。这毫无意义。现在我明白了,您的查询是正确的。他对同一个人有相同的id。@balamurugan为什么要这样?