Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 写一个查询来查找名字和姓氏相同的学生?_Mysql_Oracle11g - Fatal编程技术网

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
);