SELECT查询在同一列上具有多个结果和条件

时间:2018-09-10 11:59:58

标签: php sql

SELECT *
FROM `productattributes`
WHERE (value='Yes') AND (value='Hipster') AND (value='Half') AND (value='XS')

我希望同时匹配所有条件后得到这些结果

table screenshot

4 个答案:

答案 0 :(得分:0)

您可以使用group byhaving

SELECT product_id
FROM `productattributes`
WHERE value in ('Yes', 'Hipster', 'Half', 'XS')
GROUP BY product_id
HAVING COUNT(DISTINCT value) = 4;

如果您知道这些值没有重复,则可以使用COUNT(*) = 4代替COUNT(DISTINCT)。 (DISTINCT增加了开销。)

答案 1 :(得分:0)

SELECT * FROM `productattributes` WHERE value IN ('Yes', 'Hipster', 'Half', 'XS')

More about SQL IN Operator.

答案 2 :(得分:0)

如果必须在一个列中比较多个值,则必须使用“或”条件而不是“与”,或者可以使用“ IN”方法比较数据

SELECT *
FROM `productattributes`
WHERE (value='Yes') OR (value='Hipster') OR (value='Half') OR (value='XS')

使用IN方法的第二种方法

SELECT * FROM `productattributes` WHERE value IN ('Yes', 'Hipster', 'Half', 'XS')

答案 3 :(得分:0)

compile 'com.android.support:support-v4:18.0.+' 子句一次只看一行。特定行的列WHERE的内容可以是“是”或“时髦”或“半”或“ XS”。并非所有这些都同时出现。

您可能正在寻找的是匹配至少一个属性的产品或匹配所有属性的产品。

与至少一个属性匹配的产品

value

在这里,我们仅查看记录是否符合一个条件(例如,属性ID 25的值“ Hipster”)。如果是这样,我们选择它的产品ID。最后,我们仅使用select distinct product_id from productattributes where (attr_id = 27 and value = 'Yes') or (attr_id = 25 and value = 'Half') or (attr_id = 32 and value = 'Hipster') or (attr_id = 28 and value = 'XS') 来获取每个产品ID一次。

匹配所有属性的产品

DISTINCT

在这里,我们不查看单个记录。我们计算每个产品ID(与select product_id from productattributes group by product_id having sum(attr_id = 27 and value = 'Yes') > 0 and sum(attr_id = 25 and value = 'Half') > 0 and sum(attr_id = 32 and value = 'Hipster') > 0 and sum(attr_id = 28 and value = 'XS') > 0 的汇总)的条件匹配。该解决方案利用了MySQL的true = 1,false =0。因此,总和就是匹配条件的数量。