MySQL内部连接-请解释
我已经在这方面花了一段时间,似乎不知道如何将下面的代码从INTERSECT表单(MySQL不支持)转换为内部连接表单 如果有人能将下面的代码转换为内部连接,我想我可以从示例中理解。提前谢谢MySQL内部连接-请解释,mysql,Mysql,我已经在这方面花了一段时间,似乎不知道如何将下面的代码从INTERSECT表单(MySQL不支持)转换为内部连接表单 如果有人能将下面的代码转换为内部连接,我想我可以从示例中理解。提前谢谢 (SELECT Student.SSN, First_Name, Last_Name FROM Student, Enrolls WHERE Enrolls.SSN = Student.SSN AND CourseNo='CSC132') INTERSECT (SELECT Student.SSN,
(SELECT Student.SSN, First_Name, Last_Name
FROM Student, Enrolls
WHERE Enrolls.SSN = Student.SSN AND CourseNo='CSC132')
INTERSECT
(SELECT Student.SSN, First_Name, Last_Name
FROM Student, Enrolls
WHERE Enrolls.SSN = Student.SSN AND CourseNo='CSC134');
我希望您不是真的在使用
SSN
是主键
Quassnoi的回答预先假定了大量关于数据结构的信息。以下内容更可靠(并且可能更有效):
我认为这样做更好
SELECT Student.SSN, First_Name, Last_Name FROM
(SELECT Student.SSN, First_Name, Last_Name
FROM Student, Enrolls
WHERE Enrolls.SSN = Student.SSN AND CourseNo='CSC132') AS a
INNER JOIN
(SELECT Student.SSN, First_Name, Last_Name
FROM Student, Enrolls
WHERE Enrolls.SSN = Student.SSN AND CourseNo='CSC134') AS b
USING (Student.SSN, First_Name, Last_Name)
目前这只是为了学习,但是如果它被加密了,我就不能把它作为主键吗?@Dennis:这不是关于加密,而是关于唯一性和通用性。不知道您的法律要求,但如果学生没有
SSN
?如果两个学生有相同的一个呢?很好的一点-然而在美国SSN是独一无二的,所有公民都必须有一个。再次感谢您的帮助。@Dennis:根据,这对美国公民既不是唯一的,也不是强制性的。但再一次,我甚至不是一个可以判断的美国居民。每本数据库书都给出了一个SSN
作为坏主键的例子,所以我想我要警告你:)哇,非常有趣。再次感谢你!一个更标准的方法,但确实更快!
SELECT s.SSN, s.First_Name, s.Last_Name
FROM Student s,
Enrolls e1,
Enrolls e2
WHERE e1.SSN=s.SSN
AND e2.SSN=s.SSN
AND e2.SSN=e1.SSN
AND e1.CourseNo='CSC132'
AND e2.CourseNo='CSC134';
SELECT Student.SSN, First_Name, Last_Name FROM
(SELECT Student.SSN, First_Name, Last_Name
FROM Student, Enrolls
WHERE Enrolls.SSN = Student.SSN AND CourseNo='CSC132') AS a
INNER JOIN
(SELECT Student.SSN, First_Name, Last_Name
FROM Student, Enrolls
WHERE Enrolls.SSN = Student.SSN AND CourseNo='CSC134') AS b
USING (Student.SSN, First_Name, Last_Name)