在 WHERE 子句中选择有冲突值的行

Joh*_*ohn 3 mysql select

我在 MySQL 中选择行时遇到问题。我不想选择某些行,但正在选择它们。

我的查询:

SELECT  name,url
    FROM  additions
    WHERE  enabled = 1
      AND  picture = 1
      AND  name LIKE '%value%'
      OR  tags LIKE '%value%'
      OR  subtext LIKE '%value%';
Run Code Online (Sandbox Code Playgroud)

我不希望选择没有图片 ( picture = 0) 的行以及未启用 ( enabled = 0) 的行。我认为行匹配是因为名称、标签和/或潜台词匹配value, 因为ORWHERE 子句中的条件。

我只想选择具有图片并启用的行,而不管名称、标签、潜台词是否匹配。我怎样才能做到这一点?

Joh*_*ohn 6

答案:正如 ypercube 所说,解决方案是:

adding parentheses around the OR conditions

像这样:

SELECT name,url FROM additions WHERE enabled = 1 AND picture = 1 AND (name LIKE '%value%' OR tags LIKE '%value%' OR subtext LIKE '%value%');
Run Code Online (Sandbox Code Playgroud)

使用括号, AND 将优先并且LIKE值比较中的整个部分必须与其他评估一起为真,例如enabled = 1and picture = 1。如果没有括号,OR 语句将被单独评估(如果其中一个恰好为真,则将选择一行)。