返回多个笛卡尔乘积的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

我有一个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行。谁能告诉我我做错了什么?谢谢

好的,现在您需要将交叉联接表列表替换为主键/外键上的内部联接:

    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
语法所取代而且不鼓励使用它