Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
156 views
in Technique[技术] by (71.8m points)

SQL Server query returning many cartesian product

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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...