【发布时间】:2017-06-29 13:55:45
【问题描述】:
我有一个如下所示的 SQL Server 查询:
select
ISNULL(UPPER(w.role), '-') as 'Position Title',
concat ('SGD ',m.expectedSalary) as 'Expected Salary',
(cast(w.endYear as int) - cast(w.startYear as int)) as 'Experience',
mq.Qualification as 'Education Level',
ISNULL(ms.specialisation, '-') as 'Specialisation',
mj.dateApplied as 'Date of Application'
from
WorkExpr w,
Member m,
MemberQlftn mq,
MemberSpln ms,
MemberJob mj
where
mj.jobNumber = (select jobNumber
from MemberJob
where email = 'alanang@gmail.com')
它应该向我返回申请与 alan 相同工作的人员的详细信息(例如职位图块、预期薪水等)(电子邮件为 'alanang@gmail.com')。然而,当我运行这个查询时,我得到了超过 6000 行的数据,而我应该只取回 4。谁能告诉我我做错了什么?谢谢
【问题讨论】:
-
您确实意识到您没有加入这些表中的任何一个,对吗?
-
@GurV 我怎么知道它是否加入了?
-
除了没有连接...所以我们可以看到从这些表中实际查询的内容,您能否将表别名前缀放在所有这些列名上(mj.role、m.expectedSalary、mj .endYear 等)
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(25 年前),不鼓励使用它
标签: sql sql-server cartesian-product