Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在SQL中使用NOT?_Mysql_Sql_Join_Notin - Fatal编程技术网

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
)