问题是:
NAME, JOB, DEPARTMENT NAME, SALARY
的{{1}}和GRADE
(来自SALGRADE
表)。”到目前为止我的代码:
EMPLOYEES
这会返回70行,但结果应该只生成 14 行。
SELECT e.ename, e.job, d.dname, e.sal, s.grade
FROM emp e, dept d, salgrade s
WHERE e.deptno = d.deptno
EMPLOYEE EMP JOB DEPT NAME EMP SALARY SALARY GRADE
---------- --------- -------------- ---------- ------------
JAMES CLERK SALES 950 1
SMITH CLERK RESEARCH 800 1
ADAMS CLERK RESEARCH 1100 1
MARTIN SALESMAN SALES 1250 2
WARD SALESMAN SALES 1250 2
MILLER CLERK ACCOUNTING 1300 2
ALLEN SALESMAN SALES 1600 3
TURNER SALESMAN SALES 1500 3
BLAKE MANAGER RESEARCH 2850 4
CLARK MANAGER ACCOUNTING 2450 4
JONES MANAGER RESEARCH 2975 4
FORD ANALYST RESEARCH 3000 4
SCOTT ANALYST RESEARCH 3000 4
KING PRESIDENT ACCOUNTING 5000 5
表格有emp
empno, ename, job, deptno, comm, sal
表格有salgrade
grade
表格有DEPT
答案 0 :(得分:3)
根本原因是您使用旧的,已弃用的“隐式连接”语法:
select e.ename, e.job, d.dname, e.sal, s.grade
from emp e, dept d, salgrade s
where e.deptno = d.deptno
您只是加入了emp
和dept
表中WHERE
子句中的条件 - 您的salgrade
表已交叉加入 - 一个条目将匹配反对结果中的所有条目。
我建议始终使用新的ANSI标准JOIN语法:
SELECT
e.ename, e.job, d.dname, e.sal, s.grade
FROM
dbo.emp e
INNER JOIN
dbo.dept d ON e.deptno = d.deptno
INNER JOIN
dbo.salgrade s ON ???????
马上,你看到有关如何将salgrade
表加入你的查询的无条件 - 你需要在这里提供一个合适的条件,那么你的结果应该没问题!
答案 1 :(得分:2)
创建一个可以显示所有员工的姓名,工作,部门名称,薪酬和等级(来自SALGRADE表)的查询 查询应该是---
SELECT e.ename,e.job,dname,e.sal,g.grade
FROM emp e,dept,salgrade g
WHERE (e.sal BETWEEN g.losal AND g.hisal) AND e.deptno=dept.deptno;
答案 2 :(得分:1)
尝试这个。
SELECT e.ename,e.job,d.dname,e.sal,s.grade
FROM emp e , dept d ,salgrade s
WHERE e.deptno=d.deptno
GROUP BY e.ename
答案 3 :(得分:1)
select e.ename, e.job, d.dname, e.sal, s.grade
from emp e, dept d, salgrade s
where e.deptno = d.deptno
and s.grade in (1,2,3,4,5)
答案 4 :(得分:-1)
在使用连接时尝试这一点
import re
import random
import string
def format_string_to_regex(format_string: str) -> re.Pattern:
"""Convert a format string template to a regex."""
unique_string = ''.join(random.choices(string.ascii_letters, k=24))
stripped_fields = re.sub(r"\{[^\{\}]*\}(?!\})", unique_string, format_string)
pattern = re.escape(stripped_fields).replace(unique_string, "(.*)")
pattern = pattern.replace("\{\{","\{").replace("\}\}", "\}")
return re.compile(f"^{pattern}$")
def is_error_message(error: str, expected_message: MessageId) -> bool:
"""Returns whether the error plausibly matches the MessageId."""
expected_format = format_string_to_regex(Msg[expected_message])
return bool(expected_format.match(error))