Mysql 写一个查询来查找名字和姓氏相同的学生?
以下是我尝试过的:Mysql 写一个查询来查找名字和姓氏相同的学生?,mysql,oracle11g,Mysql,Oracle11g,以下是我尝试过的: SELECT A.STUDENT_ID FROM STUDENT A, STUDENT B WHERE A.FNAME=B.FNAME AND A.LNAME=B.LNAME AND A.STUDENT_ID!=B.STUDENT_ID; 以下是学生表列: STUDENT_ID primary key FNAME LNAME 它似乎起作用了。但根据实践考试,它值15分,所以我不确定它是否完全正确。如果有两个以上的学生有相同的fname和lname怎么办?我
SELECT A.STUDENT_ID
FROM STUDENT A, STUDENT B
WHERE A.FNAME=B.FNAME
AND A.LNAME=B.LNAME
AND A.STUDENT_ID!=B.STUDENT_ID;
以下是学生表列:
STUDENT_ID primary key
FNAME
LNAME
它似乎起作用了。但根据实践考试,它值15分,所以我不确定它是否完全正确。如果有两个以上的学生有相同的fname和lname怎么办?我该怎么写呢?或者这也行吗?从技术上讲,你所拥有的一切都是可行的。但是,每个匹配学生返回的行数将等于n-1,其中n是与匹配学生同名和姓的学生数 要解决此问题,请在查询中使用DISTINCT子句
SELECT DISTINCT A.STUDENT_ID
FROM STUDENT A, STUDENT B
WHERE A.FNAME=B.FNAME
AND A.LNAME=B.LNAME
AND A.STUDENT_ID!=B.STUDENT_ID;
为了避免使用那些multiple-FROM子句和将创建的重复行所产生的结果,我将使用EXISTS子句
在FNAME和LNAME上都有索引也会让您受益匪浅,但我怀疑这是否与您的实践考试相关。好吧,我遇到了另一个问题,我一直在思考如何创建基于函数的索引来提高性能。似乎没有任何函数作为索引的基础。
SELECT a.STUDENT_ID, a.FNAME, a.LNAME
FROM STUDENT a WHERE EXISTS (
SELECT 1 FROM STUDENT b
WHERE a.FNAME = b.FNAME
AND a.LNAME = b.LNAME
AND a.STUDENT_ID <> b.STUDENT_ID
);