SELECT *
FROM `productattributes`
WHERE (value='Yes') AND (value='Hipster') AND (value='Half') AND (value='XS')
我希望同时匹配所有条件后得到这些结果
答案 0 :(得分:0)
您可以使用group by
和having
:
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')
答案 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。因此,总和就是匹配条件的数量。