繁体   English   中英

MySQL-为什么SQL查询选择不必要的值?

[英]mysql - why sql query is selecting unnecessary values?

我想选择条件为真的行。 我有一个名为command的列,并且如果该列值包含已定义的字符串(对我来说),则将其添加到结果中。

我的问题是选择行,因为查询没有看到WHERE语句,所以如果column command包含字符串,它将选择所有数据。

SELECT * 
FROM `admin_log` 
WHERE `admin_log`.`user` = 'Admin' 
    AND command LIKE '%aznot%' 
    OR command LIKE '%hango%' 
ORDER BY `order_id` DESC 
LIMIT 0, 50

例如,我有3个管理员帐户:Admin,Zuppa和Grund。 如果命令列包含:aznot或hango,我想按帐户ADMIN选择所有数据。

我究竟做错了什么?

您需要一些括号。

SELECT * 
FROM `admin_log`
WHERE `admin_log`.`user` = 'Admin'  
AND (command LIKE '%aznot%' OR command LIKE '%hango%')
ORDER BY `order_id` 
DESC LIMIT 0, 50
SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' 
 AND (command LIKE '%aznot%' OR command LIKE '%hango%') 
 ORDER BY `order_id` DESC LIMIT 0, 50

尝试这样的事情:

SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' AND (command LIKE '%aznot%' OR command LIKE '%hango%') ORDER BY `order_id` DESC LIMIT 0, 50

最好将OR语句分隔为单独的表达式,以防止引擎误解。

SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' AND (command LIKE '%aznot%' OR command LIKE '%hango%') ORDER BY `order_id` DESC LIMIT 0, 50
SELECT * 
FROM   `admin_log` 
WHERE  `admin_log`.`user` = 'Admin' 
       AND (command LIKE '%aznot%'
        OR command LIKE '%hango%' )
ORDER  BY `order_id` DESC 
LIMIT  0, 50 

您需要适当地嵌套条件。 请参阅SQL中逻辑运算符的优先级规则

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM