的行
我在以下查询中遇到麻烦,返回包含显示的错误记录=1。
我最终获得了discipline = 6 or 7 (or others specified)
的正确选择,但是当我需要displ = 1
时,它仅返回包含displ = 0
的记录。
我的SQL查询:
SELECT schedule.id, schedule.entryid, schedule.venue, schedule.venuedate,
schedule.venuetime, schedule.schednote, schedule.classnbr,
schedule.classname, schedule.grade, schedule.discipline, schedule.displ,
schedule.hidename, schedule.lastn,schedule.firstn,schedule.duetfirst,schedule.duetlast,
schedule.triofirst,schedule.triolast,schedule.titleselection1,schedule.composer1,
schedule.titleselection2, schedule.composer2, schedule.titleselection3, schedule.composer3,
schedule.groupname, venue.venue, venue.venuelocation
FROM schedule
INNER JOIN venue ON schedule.venue = venue.venue
WHERE schedule.displ = 1
AND schedule.discipline = 3 or schedule.discipline = 4 or schedule.discipline = 5 or schedule.discipline = 6 or schedule.discipline = 7
...或更好,请使用IN
where schedule.displ = 1 and schedule.discipline in (3,4,5,6,7)
请参阅sqlfiddle
您应该使用这样的括号:
Where schedule.displ = 1 and
(
schedule.discipline = 3 or
schedule.discipline = 4 or
schedule.discipline = 5 or
schedule.discipline = 6 or
schedule.discipline = 7
)
;)
解释:
当您不帮助MySQL知道优先级时,他从左到右阅读:
( (schedule.displ = 1 and schedule.discipline = 3 ) or schedule.discipline = 4 ) or schedule.discipline = 5 ...
所以,他返回每行,纪律= 4、5、6、7,纪律= 3和显示= 1