You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写MySQL查询,根据两行数据获取目标order_id

解决EAV表中查询同时满足多属性条件的order_id问题

你的原查询无法返回结果,是因为单条记录不可能同时拥有两个不同的data_key值——data_key不能既是date又是product_id,所以AND连接的条件永远无法匹配到任何行。

针对这种EAV(实体-属性-值)结构的表,要找到同时满足多个属性条件的order_id,可以用以下几种方法:

方法1:GROUP BY + HAVING 统计匹配项

先筛选出满足任一条件的记录,再通过分组统计确保该order_id同时满足所有条件:

SELECT order_id
FROM order_data
WHERE (data_key = 'date' AND data_value = '2023-05-15')
   OR (data_key = 'product_id' AND data_value = '123')
GROUP BY order_id
HAVING COUNT(DISTINCT data_key) = 2;

这里COUNT(DISTINCT data_key) = 2确保该订单同时存在date和product_id两种匹配记录。

方法2:自连接匹配多条件

将表与自身连接,分别匹配不同的属性条件:

SELECT a.order_id
FROM order_data a
JOIN order_data b ON a.order_id = b.order_id
WHERE a.data_key = 'date' AND a.data_value = '2023-05-15'
  AND b.data_key = 'product_id' AND b.data_value = '123';

这种方式通过关联同一张表的两个实例,分别获取满足不同条件的记录,最终得到同时符合两个条件的order_id。

方法3:子查询筛选交集

先获取满足第一个条件的order_id集合,再从中筛选出满足第二个条件的结果:

SELECT order_id
FROM order_data
WHERE data_key = 'product_id' AND data_value = '123'
AND order_id IN (
    SELECT order_id
    FROM order_data
    WHERE data_key = 'date' AND data_value = '2023-05-15'
);

这种写法逻辑直观,适合条件较少的场景。

内容的提问来源于stack exchange,提问作者bigdaveygeorge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 03:57:18