MySQL在同一张表上加入两次

标签 mysql

我正在考虑如何使用连接来解决此查询,但目前正在苦苦挣扎。

了解我正在尝试做的事情的最佳方式是查看我编写的原始查询,它显然既行不通也永远不会行事。

SELECT * 
FROM shop_product_properties
WHERE name = 'Insert Size'
    AND product_id IN (
    SELECT DISTINCT product_id
    FROM shop_product_properties
        WHERE ((LOWER(name) = 'first choice material'
        AND value = 'Aluminium') AND (LOWER(name) = 'insert style' AND value = 'CCGT'))
);

我意识到我可能需要通过在同一张表上进行联接来解决这个问题。我只是不清楚从哪里开始。

最佳答案

SELECT  spp.*
FROM    (
        SELECT  product_id
        FROM    shop_product_properties
        WHERE   (name, value) = ('first_choice_material', 'Aluminum')
                OR
                (name, value) = ('insert style', 'CCGT')
        GROUP BY
                product_id
        HAVING  COUNT(*) = 2
        ) q
JOIN    shop_product_properties spp
ON      (spp.product_id, spp.name) = (q.product_id, 'Insert Size')

确保您在 (name, product_id) 上有一个唯一索引,以便它快速正确地工作。

关于MySQL在同一张表上加入两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18905719/

相关文章:

mysql - 我创建了一个触发器来从 2 个表中删除。如何执行触发器?

mysql - 无法创建/写入文件 '/opt/lampp/var/mysql/C:/temp/load_csv.csv'(错误代码 : 2 - No such file or directory)

mysql - 关于MySQL触发器使用的问题

mysql - 查询以从 map 列表中的 mysql 检索数据

mysql - MySQL 的批处理问题?

mysql - 创建表、查询和表之间的关系

python - MySQL 和 Python 是构建桌面应用程序的不错选择吗?

php - Codeigniter:如何检查mysql数据库中的用户名是否已存在

javascript - 无法更新每个按钮,仅使用 JavaScript 和 AJAX 更新第一个按钮

mysql - 这个 SQL 模式适合存储运动数据和统计数据吗?