问题
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