OR运算符忽略和运算符MYSQL

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.`

请参阅下面的查询,我想要状态为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.`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混合使用,则如果没有括号,结果是不可预测的。