Mysql 如果某项在表中某处具有特定参数,则从结果中删除该项

Mysql 如果某项在表中某处具有特定参数,则从结果中删除该项,mysql,sql,Mysql,Sql,我一直在寻找堆栈溢出,似乎找不到像这样的问题,但它可能超级简单,已经被问了一百万次。如果我的无礼冒犯了你们,我很抱歉 如果某个属性出现在表中的任何位置,我希望从结果中删除该属性 这里有一个例子:我想展示每一支没有投手的球队。这意味着我不想在剩下的结果中显示“费城人” 表格示例: 下面是我目前拥有的代码示例,其中Players在表中 SELECT DISTINCT team FROM Players WHERE position ='Pitcher' Not IN (SELECT DIS

我一直在寻找堆栈溢出,似乎找不到像这样的问题,但它可能超级简单,已经被问了一百万次。如果我的无礼冒犯了你们,我很抱歉

如果某个属性出现在表中的任何位置,我希望从结果中删除该属性

这里有一个例子:我想展示每一支没有投手的球队。这意味着我不想在剩下的结果中显示“费城人”

表格示例:

下面是我目前拥有的代码示例,其中Players在表中

SELECT DISTINCT team
FROM Players
WHERE position ='Pitcher' Not IN
    (SELECT DISTINCT position
     FROM Players)
谢谢你们的帮助

您可以使用NOT EXISTS():

或不在:

SELECT DISTINCT t.team
FROM Players t
WHERE t.team NOT IN(SELECT s.team FROM Players s
                    WHERE s.position = 'Pitcher')
以及具有左联接的解决方案:

SELECT distinct t.team
FROM Players t
LEFT OUTER JOIN Players s
 ON(t.team = s.team and s.position = 'pitcher')
WHERE s.team is null
您可以使用NOT EXISTS():

或不在:

SELECT DISTINCT t.team
FROM Players t
WHERE t.team NOT IN(SELECT s.team FROM Players s
                    WHERE s.position = 'Pitcher')
以及具有左联接的解决方案:

SELECT distinct t.team
FROM Players t
LEFT OUTER JOIN Players s
 ON(t.team = s.team and s.position = 'pitcher')
WHERE s.team is null

使用
不存在

查询

select distinct team 
from players p
where not exists(
  select * from players q
  where p.team = q.team
  and q.position = 'Pitcher'
);

使用
不存在

查询

select distinct team 
from players p
where not exists(
  select * from players q
  where p.team = q.team
  and q.position = 'Pitcher'
);

解决此问题的最简单方法可能是将
玩家
聚集到
团队

select team
from players
group by team
having sum(case when position = 'Pitcher' then 1 else 0 end) = 0;
最大的优点是你只看了一次表格


另一个优点是,您可以轻松地调整
HAVING
子句,使其具有更详细的查询,例如,获得所有至少有一名捕手、两名外野手和一名投手的球队。

解决此问题的最简单方法可能是将
球员
聚集到
球队

select team
from players
group by team
having sum(case when position = 'Pitcher' then 1 else 0 end) = 0;
最大的优点是你只看了一次表格


另一个优点是,您可以轻松地调整
HAVING
子句,使其具有更详细的查询,例如,获得所有至少有一名捕手、两名外野手和一名投手的球队。

最好有一个球队表,这样您就不必每次都阅读所有球员,就可以知道存在哪些球队。(您也不必每次添加或删除团队时都编辑您的约束。)在这种情况下,您只需从对玩家使用[NOT]In或[NOT]EXISTS子句的团队中进行选择(因为玩家表将只包含团队ID,而不包含团队名称)。尽管建议使用团队表,所以,你不必每次都阅读所有球员的资料,你就可以知道球队的存在。(您也不必每次添加或删除团队时都编辑您的约束。)在这种情况下,您只需使用关于玩家的[NOT]In或[NOT]EXISTS子句从团队中进行选择(因为玩家表只包含团队ID,而不包含团队名称)。感谢您的简单易懂和快速响应!感谢您的易懂和快速响应!