Sql 选择具有>;1名西班牙球员

Sql 选择具有>;1名西班牙球员,sql,oracle,select,group-by,subquery,Sql,Oracle,Select,Group By,Subquery,我知道这对于StackOverflow社区来说是一个非常简单的问题。然而,我在StackOverflow和其他网站上都没有找到我的问题的答案 让我解释一下这个问题 我想要一个查询来选择有超过1名西班牙球员的球队 这些是球队(装备)和球员(jugadores)表: 我的问题是: SELECT nombre FROM equipos WHERE id IN ( SELECT id_equipo FROM

我知道这对于StackOverflow社区来说是一个非常简单的问题。然而,我在StackOverflow和其他网站上都没有找到我的问题的答案

让我解释一下这个问题

我想要一个查询来选择有超过1名西班牙球员的球队

这些是球队(装备)和球员(jugadores)表:

我的问题是:

SELECT
    nombre
FROM
    equipos
WHERE
    id IN (
        SELECT
            id_equipo
        FROM
            jugadores
        WHERE
            upper(procedencia) = 'SPAIN'
    )
GROUP BY nombre
HAVING COUNT(*) > 1;
查询没有返回任何内容,但是,当我执行一个测试查询以检查是否有超过1名西班牙球员的球队时,我得到了一个有2名西班牙球员的球队,因此我希望在上面的查询中得到该球队

返回包含2名西班牙球员的团队的测试查询:

SELECT
    j.nombre,
    e.nombre AS equipo
FROM
    jugadores j
JOIN equipos e ON j.id_equipo = e.id
WHERE
    upper(procedencia) = 'SPAIN';
返回值:

Jorge Garbajosa Raptors
Jose Calderon   Raptors
Sergio Rodriguez    Trail Blazers
Pau Gasol   Lakers
Juan Carlos Navarro Grizzlies
你可以看到猛龙队有两名西班牙球员。
我的初始查询中肯定遗漏了什么。我不确定我的HAVING子句tbh。

您可以使用HAVING子句尝试下面的查询

SELECT
    e.nombre AS equipo
FROM
    jugadores j
JOIN equipos e ON j.id_equipo = e.id
WHERE upper(procedencia) = 'SPAIN'
GROUP BY upper(procedencia), e.nombre
HAVING COUNT(j.nombre)>1;

您可以使用having子句尝试下面的查询

SELECT
    e.nombre AS equipo
FROM
    jugadores j
JOIN equipos e ON j.id_equipo = e.id
WHERE upper(procedencia) = 'SPAIN'
GROUP BY upper(procedencia), e.nombre
HAVING COUNT(j.nombre)>1;

如果子查询中有
分组依据
拥有
,则您的版本将起作用:


如果子查询中有
分组依据
拥有
,则您的版本将起作用:


不要在问题中包含链接,而是将示例数据作为
格式文本直接包含在问题中。不要在问题中包含链接,而是将示例数据作为
格式文本直接包含在问题中。非常好。只是想澄清一下,你为什么需要加入?因为HAVING子句包含了另一个表中的条件,对吗?太好了。只是想澄清一下,你为什么需要加入?因为HAVING子句包含来自另一个表的条件,对吗?非常感谢,我没有考虑过这种方法,但它很有意义!非常感谢,我还没有考虑过这种方法,但它很有意义!