2015-10-14 35 views
0

所以我有這樣的內部連接MySQL的內部連接和「OR」如果值等於0

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')` 

我想要做的就是選擇取決於用戶IDSubject的所有事件,也許如果有一些事件IDSubject = 0,我可以得到那些依賴於用戶,但不能得到與IDSubject = 0的人,有沒有人得到了一些線索,如何正確地做到這一點?

我的數據庫模型,如果有人需要看到它

+0

可能是你的意思events.IDSubject IS NULL? –

+0

不,events.IDSubject = 0意味着該事件適用於所有人,而不僅僅是針對學生的主題,特別是'0'is varchar – MiGu3X

+0

聽起來你想要在IDSubject上有一個'left outer'連接,那麼一個where聲明說'events.IDSubject = 0或subject.IDSubject不是空'。 – JohnLBevan

回答

0

如果我理解正確的話,你希望它有一個匹配的主題,或者具有subjectid = 0(我猜的所有事件在主題表中不存在)。

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) 
+0

仍然無法正常工作,我想要取決於IDSubject的所有內容AND If IDSubject = 0另外(不依賴於student.IDsubject – MiGu3X

1
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'