Mysql 如何在SQL中使用NOT?
这是我的关系模式,我正试图返回参与游戏但尚未获胜的参与者的名单 所以,我有 收集了所有的名字, 已从所有名称中删除获奖者,但不存在 删除所有绘图名称 但我无法排除那些没有参与游戏但仍在参与者表名称栏中的人 我的这部分代码不起作用Mysql 如何在SQL中使用NOT?,mysql,sql,join,notin,Mysql,Sql,Join,Notin,这是我的关系模式,我正试图返回参与游戏但尚未获胜的参与者的名单 所以,我有 收集了所有的名字, 已从所有名称中删除获奖者,但不存在 删除所有绘图名称 但我无法排除那些没有参与游戏但仍在参与者表名称栏中的人 我的这部分代码不起作用 Game(p1, p2, pointsp1, pointsp2, ), Participant(name, club, age) FK Game(p1) references Participant(name), FK Game(p2) references part
Game(p1, p2, pointsp1, pointsp2, ),
Participant(name, club, age)
FK Game(p1) references Participant(name),
FK Game(p2) references participant(name)
这是我的完整代码:
{
SELECT name
FROM Participant
JOIN Game
WHERE Participant.name!=Game.p1
OR Participant.name!=Game.p2
}
假设您只需要玩过游戏但没有赢过的参与者列表,请尝试此项
SELECT name
FROM Participant P
WHERE name NOT IN (
SELECT DISTINCT p1
FROM Game G
WHERE pointsp1 > pointsp2
UNION ALL
SELECT DISTINCT p2
FROM Game G
WHERE pointsp1 < pointsp2
UNION ALL
SELECT ender
FROM Game G
WHERE pointsp1 = pointsp2
UNION ALL
SELECT starter
FROM Game G
WHERE pointsp1 = pointsp2
UNION
SELECT name
FROM Participant
JOIN Game
WHERE Participant.name!=Game.p1
OR Participant.name!=Game.p2
)
第一个子选择获得所有优胜者,忽略平局,第二个子选择获得所有比赛的所有参与者。这不是完成任务的好方法,但它会起作用。您可以使用下面的方法
select name
from participant
where name not in (
select case
when g.pointsp1 < g.pointsp2 then p2
when g.pointsp1 > g.pointsp2 then p1
end as winner
from game g
where g.pointsp1 != g.pointsp2
)
and name in (
select p1 from game
union all
select p2 from game
)
可能重复的
SELECT name
FROM Participant P
WHERE name NOT IN (
SELECT DISTINCT p1
FROM Game G
WHERE pointsp1 > pointsp2
UNION ALL
SELECT DISTINCT p2
FROM Game G
WHERE pointsp1 < pointsp2
UNION ALL
SELECT ender
FROM Game G
WHERE pointsp1 = pointsp2
UNION ALL
SELECT starter
FROM Game G
WHERE pointsp1 = pointsp2)
OR name not in (
select p1 from game
union all
select p2 from game
)