内部联接上有很多帖子,但不确定它是否能解决我的问题?
我希望加入四个表,其中前三个似乎是正确的,当我加入第四个表时,连接乘以行(表AB *表C)。
第4个表只有37行,但根据viewunitsonrun.strUnitCode,每行需要多次专门插入,在第1个表中重复多次(tblawardedlearers)。
SELECT viewlearnersonrun.intRunID,
intlearnerID,
strFirstname,
strunitcode,
strGrade
FROM tblawardedlearners
INNER JOIN viewlearnersonrun
ON viewlearnersonrun.intID = tblawardedlearners.intLearnerID
INNER JOIN viewrun
ON viewrun.intID = viewlearnersonrun.intRunID /*CORRECT TO THIS POINT */
INNER JOIN viewunitsonrun
ON viewunitsonrun.strUnitCode = tblawardedlearners.strUnitCode
WHERE viewlearnersonrun.intRunID = '200GE2' /* display only one Course */
答案 0 :(得分:4)
它产生笛卡尔积,因为两个连接都返回多个记录。为了在第一个JOIN
之后保留结果,您必须确保通过唯一键选择其他加入。如果表格没有您选择的唯一键,您可以使用DISTINCT
或GROUP BY
进行子查询(INLINE VIEW),使其按您想要的方式工作。
样品:
SELECT viewlearnersonrun.intRunID,
intlearnerID,
strFirstname,
strunitcode,
strGrade
FROM tblawardedlearners
INNER JOIN viewlearnersonrun
ON viewlearnersonrun.intID = tblawardedlearners.intLearnerID
INNER JOIN viewrun
ON viewrun.intID = viewlearnersonrun.intRunID
INNER JOIN (SELECT DISTINCT strUnitCode --, others columns...
FROM viewunitsonrun
) v
ON v.strUnitCode = tblawardedlearners.strUnitCode
WHERE viewlearnersonrun.intRunID = '200GE2'