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

如何用SQL查询与其他用户拥有相同书籍的UserID?

解决方案

首先先把你的表数据整理成更清晰的格式:

UserIDBooks
aa
ba
bb
ca
cb
cc

从你期望得到结果a来看,你的需求应该是找出那些只拥有一本书,且这本书同时被其他用户拥有的UserID——毕竟a是唯一符合这个条件的用户:他只有书籍a,而b和c也都拥有a;b和c都持有多本书,不符合“只拥有单本书”的隐含要求。

对应的SQL命令如下(假设你的表名为user_books):

SELECT DISTINCT t1.UserID
FROM user_books t1
-- 筛选出仅持有一本书的用户
WHERE (SELECT COUNT(*) FROM user_books WHERE UserID = t1.UserID) = 1
-- 验证该用户的书籍存在其他持有者
AND EXISTS (
    SELECT 1 
    FROM user_books t2
    WHERE t2.Books = t1.Books 
      AND t2.UserID != t1.UserID
);

简单解释:

  1. 子查询(SELECT COUNT(*) FROM user_books WHERE UserID = t1.UserID) = 1用来过滤出只有单本书的用户,这里只有a满足;
  2. EXISTS子查询用来确认该用户的书籍确实被其他用户拥有,a的书籍a被b和c持有,所以会被保留;
  3. DISTINCT用来避免重复返回同一个UserID(即使你的数据里没有重复记录,加上也更稳妥)。

如果你的需求是字面意思上的“存在至少一本与其他用户相同书籍的UserID”,那对应的SQL会返回a、b、c三个结果,命令如下:

SELECT DISTINCT t1.UserID
FROM user_books t1
JOIN user_books t2 
  ON t1.Books = t2.Books 
  AND t1.UserID != t2.UserID;

但结合你给出的期望结果,第一个SQL应该是你真正需要的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:17:44