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

如何筛选playlisticons表中Tom未在playlist表中拥有的记录

解决查询playlisticons表中Tom未拥有图标的问题

原SQL的问题

你的查询逻辑存在两个核心问题:

  • 关联条件使用playlisticons.name != playlist.icon会导致不必要的笛卡尔积匹配,每个playlisticons记录会和所有不匹配的playlist记录关联,最终产生重复行
  • WHERE playlist.userFK = 'Tom'会将LEFT JOIN降级为INNER JOIN,过滤掉所有playlist端无匹配的记录,完全违背了"找未拥有图标"的需求

正确的查询写法

方法1:LEFT JOIN + IS NULL(推荐)

通过LEFT JOIN关联Tom的playlist记录,筛选出关联不上的图标,保留LEFT JOIN特性的同时精准过滤:

SELECT 
    playlisticons.name,
    playlisticons.link 
FROM 
    playlisticons 
LEFT JOIN playlist 
    ON playlisticons.name = playlist.icon 
    AND playlist.userFK = 'Tom'
WHERE 
    playlist.playlistID IS NULL;

方法2:NOT IN

通过子查询获取Tom已拥有的图标列表,直接排除这些记录:

SELECT 
    name,
    link 
FROM 
    playlisticons 
WHERE 
    name NOT IN (
        SELECT icon 
        FROM playlist 
        WHERE userFK = 'Tom'
    );

方法3:NOT EXISTS

用存在性判断筛选出Tom未关联的图标,逻辑更直观:

SELECT 
    name,
    link 
FROM 
    playlisticons pl 
WHERE 
    NOT EXISTS (
        SELECT 1 
        FROM playlist p 
        WHERE p.userFK = 'Tom' 
        AND p.icon = pl.name
    );

验证结果

以上三种写法都会返回你期望的结果:

namelink
Likelink3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:27:20