mysql - 编写查询以查找名字和姓氏相同的学生?

标签 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 表的列:

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

如果在 FNAMELNAME 上都有索引,您也会受益匪浅,但我怀疑这与您的练习考试相关。

关于mysql - 编写查询以查找名字和姓氏相同的学生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33250298/

相关文章:

c# - Windows 窗体应用程序更新查询不保存数据

oracle11g - 使用四部分名称访问 Oracle DB 作为 SQL Server 链接服务器时出现无效的列定义错误

binding - 将输入和输出参数绑定(bind)到匿名 pl/sql

python - 不明白为什么我不能在 Django 中使用 use cx_Oracle

php - 删除行 PHP

php - 显示来自多个表 mysql 的大记录

javascript - 从 mysql 检索 javascript 字符串以进行后续编辑

mysql - 如何在 SQL 的 3 个特定列中输入 3 个词并搜索这些词?

sql - 按 desc 排序顺序未按预期工作

sql - 从联合查询的结果中选择 Oracle