这个sql可以工作吗
Posted
技术标签:
【中文标题】这个sql可以工作吗【英文标题】:will this sql work 【发布时间】:2016-10-28 00:17:22 【问题描述】:编写一条 SQL 语句,为满足以下所有条件的所有受薪员工打印所有员工的姓名及其部门编号:
-
从事 2 个项目,
不要赚 30000 美元,
他们的部门经理和主管同名(注意:由于姓名不是员工表的pkey,这个要求并不意味着这两个人是同一个人)。
注意主管不是部门经理
SQL 代码:
select
ename, d#
from
employee, department
where
count(p#) = 2
and salary < 30000
and cname, d# in (select ename, d#
from employee, department
where employee.cname = depatment.cname);
【问题讨论】:
测试时会发生什么?您遇到了什么实际问题? 看起来像是作业问题。 欢迎来到 Stack Overflow。请尽快阅读About 和How to Ask 页面。如果将代码 (SQL) 格式化为代码,它会很有帮助。确定您使用的是哪个 DBMS 也是一个好主意——mysql 的答案可能与 Oracle 或 DB2 的答案大不相同。在这种情况下可能不是,但识别 DBMS 仍然是一个好主意。我们还需要查看相关表的概要架构。你的拼写必须一致;你有department
和depatment
至少其中一个是错误的。使用 FROM employee, department
隐式连接也是一个坏主意。
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN
语法-92 SQL 标准(20 多年前),不鼓励使用它
【参考方案1】:
这对您来说是一个好的开始,因为缺少一些关于经理和主管的数据(通常您没有提供任何架构):
select ename
from employee e
join department d on e.cname = d.cname
where salary < 30000
group by ename
having count(p#) = 2
它将显示每个从事 2 个项目的工资低于 30K 的员工。
您可能需要更多的连接/子查询来实现您想要的输出。
【讨论】:
以上是关于这个sql可以工作吗的主要内容,如果未能解决你的问题,请参考以下文章
Windows 服务中的计时器 .. 这个规模可以吗?会不会出现线程问题?这是不好的做法吗?