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