OR运算符忽略和运算符MYSQL
请参阅下面的查询,我想要状态为using或provide,userid不等于1,coursecode为cs3333的所有记录OR运算符忽略和运算符MYSQL,mysql,join,operators,Mysql,Join,Operators,请参阅下面的查询,我想要状态为using或provide,userid不等于1,coursecode为cs3333的所有记录 SELECT c.`id` AS courseid, c.`userid` AS userid, c.`coursecode`, m.`title`, s.`sem_name`, p.`professor`, st.`status`, a.`author_name`, q.`quality`, m.`
SELECT c.`id` AS courseid,
c.`userid` AS userid,
c.`coursecode`,
m.`title`,
s.`sem_name`,
p.`professor`,
st.`status`,
a.`author_name`,
q.`quality`,
m.`comments`,
m.`price`,
m.`material`
FROM sc_courses c
JOIN sc_c_materials m
ON c.`id`=m.`courseid`
JOIN sc_semesters s
ON s.`id`=c.`semid`
JOIN sc_professors p
ON c.`profid`=p.`id`
JOIN sc_status st
ON c.`statusid`=st.`id`
LEFT JOIN sc_authors a
ON m.`authorid`=a.`id`
JOIN sc_quality q
ON m.`qualityid`=q.`id`
WHERE st.`status` = "offering" OR st.`status` = "using" AND c.`userid` != "1" AND c.`coursecode` = "CS3333";
查询正在运行,但它忽略了运算符和。上面的查询返回所有记录,其中userid为1,coursecode不等于cs3333,但我不希望这些记录。请告诉我我做错了什么???您只需要括号
WHERE (st.`status` = "offering" OR st.`status` = "using") AND c.`userid` != "1" AND c.`coursecode` = "CS3333";
那是因为优先权。您应该放置
(..)
以更改比较顺序
(st.`status` = "offering" OR st.`status` = "using")
AND c.`userid` != "1"
AND c.`coursecode` = "CS3333"
opss愚蠢的错误这里它正在处理这个查询
SELECT c.`id` AS courseid,
c.`userid` AS userid,
c.`coursecode`,
m.`title`,
s.`sem_name`,
p.`professor`,
st.`status`,
a.`author_name`,
q.`quality`,
m.`comments`,
m.`price`,
m.`material`
FROM sc_courses c
JOIN sc_c_materials m
ON c.`id`=m.`courseid`
JOIN sc_semesters s
ON s.`id`=c.`semid`
JOIN sc_professors p
ON c.`profid`=p.`id`
JOIN sc_status st
ON c.`statusid`=st.`id`
LEFT JOIN sc_authors a
ON m.`authorid`=a.`id`
JOIN sc_quality q
ON m.`qualityid`=q.`id`
WHERE c.`userid` != "1" AND c.`coursecode` = "CS3333" AND st.`status` = "offering" OR
c.`userid` != "1" AND c.`coursecode` = "CS3333" AND st.`status` = "using";
其中st.status=“提供”或st.status=“使用”和c.userid!=“1”和c.coursecode=“CS3333”
——告诉我们您认为这种情况意味着什么?首先计算括号内的内容,然后将括号外的内容添加到筛选中。因此,您首先或全部询问状态必须为“提供”或“使用”,如果满足此条件,则将其余过滤器添加到查询中。如果将OR与大量AND混合使用,则如果没有括号,结果是不可预测的。