mysql - 选择具有多个可能值的所有行

标签 mysql sql

我试图从产品表 (*) 中获取具有以下 sub_property 集的所有字段:

subprop_name=X
subprop_value=Y

我有下表:

https://imgur.com/a/y4LGqMI (无法上传图片,因为格式不被接受)

举个例子,如果我有两个产品,它们的 sub_property 表中有这样的条目:
subprop_name=X
subprop_value=Y

我想返回。正如架构所描述的,一个产品可以有多个 sub_property 条目!

到目前为止,这就是我所拥有的:

SELECT prod_id,prod_name from product WHERE product.prod_id IN
(
    SELECT property.product_prod_id FROM property WHERE property.prop_id IN
    (
        SELECT property_prop_id from sub_property WHERE
        (
            sub_property.subprop_name="Type de scanner" AND sub_property.subprop_value="par transparence"
        )
        OR
        (
            sub_property.subprop_name="Pages/minute maximum" AND subprop_value="8.5 pages"
        )
    )
)

但显然,由于“OR”,它不起作用。

它返回具有一组 sub_property 的所有项目,而不是具有所有 sub_property 组的所有产品。

数据库HERE

最佳答案

对元组使用 JOIN 和 IN 可能是一个简单的解决方案。

SELECT p.prod_id, p.prod_name
FROM product p
JOIN property AS prop 
  ON prop.product_prod_id = p.prod_id
JOIN sub_property AS subprop 
  ON subprop.property_prop_id = prop.prop_id
WHERE (subprop.subprop_name, subprop.subprop_value) IN (
  ('Type de scanner', 'par transparence'), 
  ('Pages/minute maximum', '8.5 pages')
)                          
GROUP BY p.prod_id, p.prod_name

关于mysql - 选择具有多个可能值的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53915582/

相关文章:

mysql - 连接 4 个表时出现问题

php - 添加下拉列表,其中的值从数据库填充

MYSQL AES解密,结果为空?

mysql - 如何在 join 中使用 datediff 函数

java - 我正在尝试从数据库中减去输入文本字段的数字,但不知道该怎么做

SQL查找表中首次出现的数据集

php - 我想在不使用 phpmyadmin 的情况下从数据库中导出单个表

mysql - 使用日期排名

MYSQL - 解析逗号分隔的数字字符串并将每个数字与设置的数字进行比较

sql - 按开始时间和结束时间聚合计划数据