【问题标题】:Stuck on fixing this query, mistakes in two commands that I wrote坚持修复这个查询,我写的两个命令中的错误
【发布时间】:2016-03-02 17:32:53
【问题描述】:
EMPLOYEE (fname, minit, lname, ssn, birthdate, address, sex, salary, superssn, dno)
KEY: ssn

DEPARTMENT (dname, dnumber, mgrssn, mgrstartdate)
KEY: dnumber.

PROJECT (pname, pnumber, plocation, dnum)
KEY: pnumber.

WORKS_ON (essn, pno, hours)
KEY: (essn, pno)

DEPENDENT (essn, dependent-name, sex, bdate, relationship)
KEY: (essn, dependent-name)

所以我真的很困惑如何在选择命令中添加更多材料,比如说添加 SSN

我想查找项目编号为 47 的所有经理的姓氏和名字:

SELECT lname, fname
FROM   employee e, department d
Where d.mgrssn  = e.ssn
WHERE  e.ssn IN (SELECT w.essn
                       FROM   works_on w, project p
                       WHERE  w.pno  = p.pnumber
                                AND     w.pno ='47'
                               );

但现在我想给它添加 ssn:

SELECT lname, fname, ssn
FROM   employee e, department d
Where d.mgrssn  = e.ssn
WHERE  ssn IN (SELECT w.essn
                       FROM   works_on w, project p
                       WHERE  w.pno  = p.pnumber
                                AND     w.pno ='02'
                               );

【问题讨论】:

  • (1) 您的第二个查询有什么问题?它似乎在选择列表中包含 ssn 列。 (2) 不要使用 SSN 作为表键,这是一个有问题的选择。
  • 你能写一个答案吗?我保证我会接受。基本上我只想让这两个命令正确,有和没有 SSN 作为标准
  • 不清楚是什么问题。您是要显示 SSN 还是按 SSN 过滤?
  • 对不起,我的意思是对于第一个命令,我只想获取正在从事项目 47 的经理的 lname 和 fname,第二个命令是包含姓氏和名字的经理的社会保障
  • 员工表引用 e 保存经理记录并具有 ssn(您在员工/部门表的联接中使用了它),因此您的第二个查询似乎已经正确。

标签: sql database select in-clause


【解决方案1】:

你能试试这个吗?

select * from employee e,works_on w,department d 
where e.ssn=d.mgrssn and e.ssn=w.essn and w.pno = 47

使用连接编辑

select * from employee 
join works_on on employee.ssn=works_on.essn 
join department on employee.ssn=department.mgsrssn
wher works_on.pno=47

【讨论】:

  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(20 多年前),不鼓励使用它
  • 是的 - ANSI'92 标准于 1992 完成 - 现在是 23 年前
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-13
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多