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

时间:2015-06-08 15:55:01

标签: mysql

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

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

SELECT *
FROM product_attributes_basic
WHERE pab_sku = 'abc' OR 'def';

以上内容返回整个表格中的每一行(数十万)。

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

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

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

6 个答案:

答案 0 :(得分:6)

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

WHERE pab_sku = 'abc' OR 'def';

不一样
WHERE pab_sku = 'abc' OR pab_sku = 'def';

您的代码以罗嗦的方式编写实际上意味着

WHERE pab_sku = 'abc' OR WHERE 'def'

WHERE 'def'然后只需要True进行评估。

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

WHERE (pab_sku = 'abc' OR pab_sku = 'def');
WHERE pab_sku IN ('abc', 'def');

答案 1 :(得分:3)

您需要再次编写列名

SELECT *
FROM product_attributes_basic
WHERE pab_sku = 'abc' OR pab_sku = 'def'

或使用IN

SELECT *
FROM product_attributes_basic
WHERE pab_sku IN ('abc', 'def')

答案 2 :(得分:2)

由于:

SELECT *
FROM product_attributes_basic
WHERE pab_sku = 'abc' OR 'def';

在这种情况下,OR根本没有查看行值,基本上语法是有效的,但它没有按照您的想法进行。

更改为:

SELECT *
FROM product_attributes_basic
WHERE pab_sku = 'abc' OR pab_sku = 'def';

答案 3 :(得分:0)

SELECT *
FROM product_attributes_basic
WHERE pab_sku = 'abc' OR pab_sku = 'def';

答案 4 :(得分:0)

您应该像这样修改您的查询:

SELECT *
FROM product_attributes_basic
WHERE (pab_sku = 'abc' OR pab_sku = 'def');

这是因为您必须将逻辑函数或不仅应用于字符串,而且应用于列。

答案 5 :(得分:0)

您必须执行此查询:

SELECT *
FROM product_attributes_basic
WHERE pab_sku = 'abc' OR pab_sku = 'def';