SQL 服务器查询返回许多笛卡尔积
SQL Server query returning many cartesian product
我有一个 SQL 服务器查询,如下所示:
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')
它应该 return 我申请了与 alan 相同的工作(电子邮件是 'alanang@gmail.com')的人的详细信息(例如职位名称、期望薪水等)。但是,当我 运行 这个查询时,我得到了超过 6000 行数据,而我只应该返回 4。谁能告诉我我做错了什么?谢谢
好的,现在您需要用 primary/foreign 键上的 INNER JOINS 替换 cross-join table 列表:
from WorkExpr w,
Member m,
MemberQlftn mq,
MemberSpln ms,
MemberJob mj
替换为类似以下内容,但 table 之间的关系正确:
from WorkExpr w
inner join Member m
on w.memberid = m.memberid
inner join MemberQlftn mq
on w.memberid = mq.memberid
inner join MemberSpln ms
on w.memberid = ms.memberid
inner join MemberJob mj
on w.memberid = mj.memberid
我有一个 SQL 服务器查询,如下所示:
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')
它应该 return 我申请了与 alan 相同的工作(电子邮件是 'alanang@gmail.com')的人的详细信息(例如职位名称、期望薪水等)。但是,当我 运行 这个查询时,我得到了超过 6000 行数据,而我只应该返回 4。谁能告诉我我做错了什么?谢谢
好的,现在您需要用 primary/foreign 键上的 INNER JOINS 替换 cross-join table 列表:
from WorkExpr w,
Member m,
MemberQlftn mq,
MemberSpln ms,
MemberJob mj
替换为类似以下内容,但 table 之间的关系正确:
from WorkExpr w
inner join Member m
on w.memberid = m.memberid
inner join MemberQlftn mq
on w.memberid = mq.memberid
inner join MemberSpln ms
on w.memberid = ms.memberid
inner join MemberJob mj
on w.memberid = mj.memberid