Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using INNER JOIN multiplies selected rows?

Tags:

sql

inner-join

There are alot of posts on inner joins but not sure if it quite answers my problem?

I have four tables I wish to join in which the first three seem correct, its when I join the 4th table the join multiplies rows (table AB * table C).

The 4th table only has 37 rows however each row would need to be specifically inserted several times according to the viewunitsonrun.strUnitCode which are repeated several times in the 1st table (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 */
like image 751
starydynamo Avatar asked Feb 26 '26 02:02

starydynamo


1 Answers

It result in Cartesian product because both joins return multiples records. In order to keep results after first JOIN, you must ensure others join are selected by unique keys. If tables don't have unique keys for your select, you can make sub-query (INLINE VIEW), using DISTINCT or GROUP BY to make it work how you want.

Sample:

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'
like image 57
Ftaveras Avatar answered Feb 28 '26 00:02

Ftaveras



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!