为什么这个非常简单的MySQL查询返回每一行?

MrT*_*MrT 2 mysql

我正在尝试运行一个非常简单的MySQL查询,该查询将获取表product_attributes_basic的字段pab_sku(数据类型varchar(255))等于相对较短的值列表的任何行.出于某种原因,此查询返回表中的每一行.

(旁白:我使用的是MySQL Workbench,它适用于更复杂的查询.)

SELECT *
FROM product_attributes_basic
WHERE pab_sku = 'abc' OR 'def';
Run Code Online (Sandbox Code Playgroud)

上面返回整个表中的每一行(几十万​​).

当我单独查询任一字符串时,不返回任何记录.(这是正确的;这些是无意义的值.)

我试过删除撇号,但这没有效果; 所有行都返回.

这很简单,我对下一步感到茫然.为什么这个查询会返回每一行?

Sup*_*Man 6

问题是它没有像你期望的那样分裂.

WHERE pab_sku = 'abc' OR 'def';
Run Code Online (Sandbox Code Playgroud)

是不一样的

WHERE pab_sku = 'abc' OR pab_sku = 'def';
Run Code Online (Sandbox Code Playgroud)

你的代码以罗嗦的方式写实际意味着

WHERE pab_sku = 'abc' OR WHERE 'def'
Run Code Online (Sandbox Code Playgroud)

WHERE 'def'然后就像往常一样进行评估True.

因此,您需要明确告诉它您pab_sku在两种情况下都要检查该值.其他人建议使用以下其中一项:

WHERE (pab_sku = 'abc' OR pab_sku = 'def');
WHERE pab_sku IN ('abc', 'def');
Run Code Online (Sandbox Code Playgroud)

  • 关于逻辑运算符的mysql文档:https://dev.mysql.com/doc/refman/5.0/en/logical-operators.html (2认同)