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

SQL查询:如何获取同时购买Apple和Banana的用户相关记录?

解决方法

你的原SQL语句存在逻辑错误:同一行的Fruit字段不可能同时等于Apple和Banana,所以这个条件永远不会返回结果,而且字段名应该是Fruit而非x。针对百万行数据的场景,以下是两种高效的实现方案:

方案一:分组筛选用户后关联原表

这种方法先筛选出同时购买了Apple和Banana的用户,再关联原表获取这些用户的对应记录,适合数据量较大的场景:

SELECT t.Fruit, t.name
FROM your_table t
INNER JOIN (
    -- 筛选出同时买了两种水果的用户
    SELECT name
    FROM your_table
    WHERE Fruit IN ('Apple', 'Banana')
    GROUP BY name
    HAVING COUNT(DISTINCT Fruit) = 2
) AS qualified_users ON t.name = qualified_users.name
-- 只保留这两种水果的记录
WHERE t.Fruit IN ('Apple', 'Banana');

优化提示

给name和Fruit字段建立复合索引(CREATE INDEX idx_name_fruit ON your_table(name, Fruit);),能大幅提升分组和关联操作的效率,避免全表扫描。

方案二:使用EXISTS子查询

通过子查询验证同一用户是否存在另一种水果的记录,逻辑更直观:

SELECT Fruit, name
FROM your_table t1
WHERE Fruit IN ('Apple', 'Banana')
AND EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.name = t1.name
    -- 匹配当前记录对应的另一种水果
    AND t2.Fruit = CASE WHEN t1.Fruit = 'Apple' THEN 'Banana' ELSE 'Apple' END
);

注意事项

  • 替换语句中的your_table为你的实际表名;
  • 如果Fruit字段值大小写敏感(比如apple和Apple被视为不同值),需保证查询条件与数据格式一致;
  • 同样建议给(name, Fruit)建立复合索引,优化子查询的匹配速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:47:46