返回多个笛卡尔乘积的SQL Server查询
我有一个SQL Server查询,如下所示:返回多个笛卡尔乘积的SQL Server查询,sql,sql-server,cartesian-product,Sql,Sql Server,Cartesian Product,我有一个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
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行。谁能告诉我我做错了什么?谢谢好的,现在您需要将交叉联接表列表替换为主键/外键上的内部联接:
from WorkExpr w,
Member m,
MemberQlftn mq,
MemberSpln ms,
MemberJob mj
替换为以下内容,但要使用表之间的正确关系:
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
你知道你没有加入任何一个表,对吗?@GurV我怎么知道它是否加入了?而且根本没有加入。。。因此,我们可以从这些表中看到实际查询的内容,您可以在所有这些列名(mj.role、m.expectedSalary、mj.endYear等)上添加表别名前缀吗?在ANSI-92 SQL标准(25年前)中,旧样式的以逗号分隔的表列表样式被正确的ANSI
JOIN
语法所取代而且不鼓励使用它