【问题标题】:MYSQL SELECT clause giving unwanted results. Multiple WHERE AND statementsMYSQL SELECT 子句给出了不需要的结果。多个 WHERE AND 语句
【发布时间】:2013-10-09 11:58:31
【问题描述】:
SELECT `post`.*, `user_account`.`project_name` 
FROM 
`post` 
INNER JOIN `user_account` ON `post`.`user_id` = `user_account`.`user_id` 
WHERE 
`post`.`deleted_at` IS NULL 
AND `is_active` = 1 
AND `deleted_at` IS NULL 
AND `end` > '2013-10-09' 
AND `user_account`.`project_name` LIKE '%intensiivkursus%' 
OR ( 
`title` LIKE '%intensiivkursus%' 
OR `topics` LIKE '%intensiivkursus%' 
OR `target_group` LIKE '%intensiivkursus%' 
OR `lectors` LIKE '%intensiivkursus%' 
OR `timetable` LIKE '%intensiivkursus%' 
) 
GROUP BY 
`post`.`id` 
ORDER BY 
`post`.`created_at` DESC

我希望这只会给出is_active = 1 的结果,但由于某种原因,它给出了相反的结果。我得到 5 个结果,全部为 is_active = 0
我在这里错过了什么?

【问题讨论】:

    标签: mysql sql inner-join where-clause


    【解决方案1】:

    我怀疑您的 OR / AND 和括号有问题。运算符的优先级会造成混乱。

    你不是说

    AND 
    (`user_account`.`project_name` LIKE '%intensiivkursus%' 
    OR `title` LIKE '%intensiivkursus%' 
    OR `topics` LIKE '%intensiivkursus%' 
    OR `target_group` LIKE '%intensiivkursus%' 
    OR `lectors` LIKE '%intensiivkursus%' 
    OR `timetable` LIKE '%intensiivkursus%' 
    ) 
    

    或许

    AND `user_account`.`project_name` LIKE '%intensiivkursus%' 
    AND ( 
    `title` LIKE '%intensiivkursus%' 
    OR `topics` LIKE '%intensiivkursus%' 
    OR `target_group` LIKE '%intensiivkursus%' 
    OR `lectors` LIKE '%intensiivkursus%' 
    OR `timetable` LIKE '%intensiivkursus%' 
    ) 
    

    【讨论】:

    • @ruuter 当我有一个 OR 外括号时,我总是检查三遍。当然,它可能是需要的,如果你管理运算符的优先级,它是完全有效的,但不是那么频繁
    • 是的,谢谢,就是这样。如此简单,但确实令人困惑,特别是当你第 26 小时醒来时:p
    猜你喜欢
    • 2018-09-02
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多