结合LIKE和AND的SQL给了我错误的结果

时间:2013-06-24 01:34:02

标签: mysql sql myisam

SELECT * FROM table WHERE column LIKE '%whatever%' AND id='1' OR id='2' OR id='3'

使用上面的代码时,我会返回三行而不是带有
的那一行 column LIKE '%whatever%'
我觉得很奇怪,也无法理解为什么。

如何重写我的sql代码以使用LIKE来检查具有id ='whatever'的多个行

我使用MYSQL和MyISAM

2 个答案:

答案 0 :(得分:6)

你需要括号:

SELECT *
FROM table
WHERE column LIKE '%whatever%' AND (id='1' OR id='2' OR id='3')

AND的优先级高于OR,因此您的原文被解释为:

WHERE )column LIKE '%whatever%' AND id='1') OR id='2' OR id='3'

使用in更好地编写原文:

SELECT *
FROM table
WHERE column LIKE '%whatever%' AND id in ('1', '2', '3')

而且,如果id实际上是一个整数,那么你应该删掉单引号。他们认为类型实际上是一个字符串。

答案 1 :(得分:2)

使用IN功能

SELECT * FROM table WHERE column LIKE '%whatever%' AND id IN ('1', '2', '3')

我认为id是一个varchar。如果它是一个int,那么使用:

SELECT * FROM table WHERE column LIKE '%whatever%' AND id IN (1, 2, 3)