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