简体   繁体   中英

MySql inner join and “OR” if value equals 0

So I have this inner join

SELECT IDEvent,events.IDSubject,events.month,events.year
FROM events
    INNER JOIN subjects ON events.IDSubject = subjects.IDSubject
    INNER JOIN classes ON subjects.IDClass = classes.IDClass
    INNER JOIN students ON classes.IDClass = students.IDClass
WHERE events.month=10
    AND events.year=2015
    AND (students.DNI=DNI OR events.IDSubject='0')`

What I want to do is to select all the events depending on the user IDSubject AND maybe if there is some event with IDSubject=0 also, I can get the ones that are depending from the user, but can't get the ones with IDSubject=0, have anyone got some clue of how to do it correctly?

My database model if anyone needs to see it

SELECT IDEvent,events.IDSubject,events.month,events.year
FROM events
      INNER JOIN subjects ON events.IDSubject = subjects.IDSubject
      INNER JOIN classes ON subjects.IDClass = classes.IDClass
      INNER JOIN students ON classes.IDClass = students.IDClass
WHERE events.month=10
      AND events.year=2015
      AND students.DNI=DNI
UNION SELECT IDEvent, events.IDSubject ,events.month ,events.year
      FROM events WHERE IDSubject='0'

If I've understood correctly, you want all events which have a matching subject, or have subjectid=0 (which I'm guessing doesn't exist in the subjects table).

SELECT IDEvent
, events.IDSubject
,events.month
,events.year
FROM events
LEFT OUTER JOIN subjects ON events.IDSubject = subjects.IDSubject
INNER JOIN classes ON subjects.IDClass = classes.IDClass
INNER JOIN students ON classes.IDClass = students.IDClass
WHERE (events.IDSubject = 0 OR subjects.IDSubject is not null)
AND events.month = 10
AND events.year = 2015
AND (students.DNI = DNI OR events.IDSubject = 0)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM