所以这是我尝试过的:
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 表的列:
STUDENT_ID primary key
FNAME
LNAME
这似乎有效。但是根据练习考试,它值15分,所以我不确定它是否完全正确。如果有超过两个学生具有相同的 fname 和 lname 怎么办?我将如何编写它或者这也适用于它?
最佳答案
为了避免Cartesian product (这是你从那些多个 FROM
子句中得到的)和将创建的重复行,我会使用 EXISTS
子句
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
);
http://sqlfiddle.com/#!9/75fd6/3
如果在 FNAME
和 LNAME
上都有索引,您也会受益匪浅,但我怀疑这与您的练习考试相关。
关于mysql - 编写查询以查找名字和姓氏相同的学生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33250298/