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

如何用SQL查询未加入指定球队的用户创建球员

需求说明

需要在下拉视图中展示尚未加入指定球队(TeamID=14)的球员,具体要求:

  • 球员由UID=2的用户创建
  • 需获取球员的PID、PlayerID信息

现有SQL语句的问题:使用=能正确获取已加入该球队的球员,但改为<>时,仅会显示未在当前球队但加入了其他球队的球员,无法覆盖完全未加入任何球队的情况。

现有SQL:

SELECT DISTINCT Player_tbl.* 
FROM PlayerTeam_tbl 
LEFT JOIN Player_tbl ON Player_tbl.PID = PlayerTeam_tbl.PlayerID 
WHERE TeamID <> 14 AND UID = 2

数据表结构

球员表(Player_tbl)

PID名字(Fornamn)号码(Number)是否教练(Coach)创建者UID(UID)
15Stephen852
16Axel47否(nej)2
17Kaspar32否(nej)2
18Mats66否(nej)2
19Oskar99否(nej)2

球队表(Team_tbl)

TID组别(Division)球队名称(Team)特点(Strength)球队创建者UID(TemUID)
14u20KFUM...bankvarmare2
17u17Malmomangd2
20u14KFUM...give and go2
21u17Frovi FCMaximus2
23u14Rovani...1002
24u20Matss...programering3
25u14testtestar2
26u17kalle k...iq2
27u20Londonvet inte5

球员球队关联表(PlayerTeam_tbl)

PTID球员ID(PlayerID)球队ID(TeamID)球队创建者UID(TeamUID)
515152
1115172
1615232
6018172
6317172
7519142
7716142
8017142

正确SQL写法

方法1:使用NOT EXISTS子查询

SELECT PID AS PlayerID, PID
FROM Player_tbl
WHERE UID = 2
AND NOT EXISTS (
    SELECT 1
    FROM PlayerTeam_tbl
    WHERE PlayerTeam_tbl.PlayerID = Player_tbl.PID
    AND PlayerTeam_tbl.TeamID = 14
)

方法2:左连接后筛选NULL值

SELECT DISTINCT p.PID AS PlayerID, p.PID
FROM Player_tbl p
LEFT JOIN PlayerTeam_tbl pt ON p.PID = pt.PlayerID AND pt.TeamID = 14
WHERE p.UID = 2
AND pt.PlayerID IS NULL

逻辑说明

  • 原SQL的问题:将TeamID <>14放在WHERE子句中,会过滤掉关联表中TeamID为14的记录,同时也会排除完全未加入任何球队的球员(左连接后这类球员的TeamID为NULL,NULL与任何值比较结果为未知,会被WHERE条件过滤)。
  • 方法1逻辑:先筛选出UID=2创建的所有球员,再排除已加入TeamID=14的球员,不受其他球队关联记录影响。
  • 方法2逻辑:将球员表与关联表按TeamID=14做左连接,未加入该球队的球员(含未加入任何球队的)在关联表中的字段会是NULL,筛选这类NULL记录即可得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:15:03