我正在尝试运行一个非常简单的MySQL查询,该查询将获取表 product_attributes_basic 的字段 pab_sku (数据类型varchar(255)
)的任何行等于相对较短的值列表。出于某种原因,此查询返回表中的每一行。
(旁白:我使用的是MySQL Workbench,它适用于更复杂的查询。)
SELECT *
FROM product_attributes_basic
WHERE pab_sku = 'abc' OR 'def';
以上内容返回整个表格中的每一行(数十万)。
当我单独查询任一字符串时,不会返回任何记录。 (这是正确的;这些是无意义的值。)
我尝试删除撇号,但这没有效果;所有行都返回。
这很简单,我对下一步感到茫然。为什么这个查询会返回每一行?
答案 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';