SQL Server query returning many cartesian product

只愿长相守 提交于 2019-12-13 23:18:12

问题


I have a SQL Server query which looks like this:

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')

it is supposed to return me the details of people(such as the position tile, expected salary etc) who have applied for the same job as alan(which email is 'alanang@gmail.com'). However, when I run this query, I get over 6000 rows of data when I am only supposed to get back 4. can anyone tell me what am i doing wrong? Thanks


回答1:


OK, now you need to replace your cross-join table list with INNER JOINS on their primary/foreign keys:

    from WorkExpr w,
    Member m,
    MemberQlftn mq,
    MemberSpln ms,
    MemberJob mj

replace with something like the following, but with the proper relationships between the tables:

    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


来源:https://stackoverflow.com/questions/42172576/sql-server-query-returning-many-cartesian-product

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!