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

SQL一对多查询:获取非指定用户创建及投票的idea_id列表

解决方案:获取符合条件的创意ID列表

方法一:LEFT JOIN + IS NULL

通过左连接关联创意表和当前用户的投票记录,筛选出无匹配投票记录的创意,同时排除用户自己创建的:

SELECT i.id AS idea_id
FROM Idea i
LEFT JOIN Votes v 
  ON i.id = v.idea_id 
  AND v.voter_id = auth.uid() -- 仅关联当前用户的投票记录
WHERE i.created_by != auth.uid() -- 排除用户自己创建的创意
  AND v.id IS NULL; -- 筛选出当前用户未投票的创意

说明:

  • 把v.voter_id = auth.uid()放在ON子句而非WHERE,是为了保留所有非用户创建的创意,未被该用户投票的创意会对应投票表的NULL值。
  • 最后通过v.id IS NULL筛选出用户未投票的记录,因为如果用户投过票,v.id会存在值。

方法二:NOT EXISTS 子查询

用子查询检查当前用户是否对创意投过票,直接筛选符合条件的创意:

SELECT id AS idea_id
FROM Idea
WHERE created_by != auth.uid() -- 排除自己创建的创意
  AND NOT EXISTS (
    SELECT 1
    FROM Votes
    WHERE Votes.idea_id = Idea.id
      AND Votes.voter_id = auth.uid() -- 检查当前用户是否投过该创意
  );

说明:

  • NOT EXISTS会判断子查询是否有结果,没有结果则说明当前用户未对该创意投票,符合需求。
  • 这种写法逻辑更直观,性能在多数数据库中也有良好表现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:36:20