MySQL - 多个字段必须为 true 的 SELECT

标签 mysql

我不知道从哪里开始!

我有一个 product 表和一个 product_attributes 表。每个产品可以有多个属性。

如果我们只使用 2 个属性来保持简单(id 1 = 尺寸,id 2 = 颜色),product_attributes 表如下所示:

id   product_id   attribute_id   value
======================================

1    1            1              10
2    1            2              Red
3    1            1              12
4    1            2              Red
5    2            1              10
6    2            2              Blue

这里我们有 2 种产品,第一种有 2 种尺寸(10 和 12),均为红色。第二个是蓝色 10 号。

我想查找尺寸等于 (10 OR 12) AND 颜色为红色的所有产品。

SELECT * FROM product p INNER JOIN product_attribute a ON a.product_id = p.id WHERE (a.value = '10' OR a.value = '12') AND (a.value = 'red')

上面的内容显然行不通,但给出了我想要的东西的想法。我很确定我需要在这里的某个地方进行计数(点击次数 = 2),但我不知道从哪里开始。

感谢任何帮助。

最佳答案

这样的事情应该有效:

SELECT * 
FROM product p 
WHERE EXISTS (SELECT * 
    FROM product_attribute pa1 
    WHERE pa1.product_id = p.id
        AND pa1.value in ('10', '12'))
AND EXISTS (SELECT * 
    FROM product_attribute pa2 
    WHERE pa2.product_id = p.id
        AND pa2.value = 'Red')

@SalmanA 提出的问题仍然适用。

关于MySQL - 多个字段必须为 true 的 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35768516/

相关文章:

mysql - Rails 控制台未将数据写入数据库

PHP MYSQL可重用删除查询

mysql - 使用 mysql order case 对特定行进行排序

Mysql Master Slave Replication on Large Database table(如何同步初始数据)

python - 定义跨多个模型的关系 - Django

mysql - SQL SUM 具有活跃 child 的 parent 数量

php - MySQL:在 CakePHP 的树行为中对表中的字段进行求和的最快方法

php - 插入查询后更新状态

php - 使用 mysql 进行高级搜索

MySQL - 获取所有带有标签的帖子(不同的)