SQL Join / Nested Query

时间:2016-03-01 18:42:26

标签: sql join

查询是:显示具有2种以上官方语言的国家/地区代码和名称

我的回答是:

select 
    c.country_name, 
    cl.countrycode
from 
    country c, 
    countrylanguage cl
where 
    c.code=cl.countrycode and c.code IN

    ( select code 

        from countrylanguage
        where cl.isOfficial='T'
        group by cl.countrycode
        having count(cl.isOfficial)>2
    );

问题在于,如果任何一个国家/地区有3种官方语言大于2,那么会显示多次相同的输出 ZWE津巴布韦 ZWE津巴布韦 ZWE津巴布韦

但我只需要一个 有两个表格如下:

CountryLanguage (CountryCode, Language ,IsOfficial ,Percentage)

Country (Code ,country_Name) 

此表格还有一些属性,但我们现在不需要它们来回答此问题。

3 个答案:

答案 0 :(得分:0)

首先,你应该明确地JOIN你的桌子。这意味着JOIN条款。您的FROM条款从不 永远中包含多个表格。

接下来,一致地命名列。您是否在列名中使用下划线或没有?

由于每个国家/地区只有一个代码(我假设),您只需在主查询中GROUP BY - 根本不需要子查询。

SELECT
    C.country_name,
    CL.country_code
FROM
    Country C
INNER JOIN CountryLanguage CL ON CL.country_code = C.code
GROUP BY
    C.country_name,
    CL.country_code
HAVING
    COUNT(*) > 2

答案 1 :(得分:0)

你有几种选择。这是使用exists

的人
select code, country_name
from country c
where exists (
    select 1
    from countrylanguage cl 
    where c.code = cl.countrycode
    group by cl.code
    having count(*) > 2)

答案 2 :(得分:0)

标准SQL,对所有数据库都有效:

select
    country.countrycode,
    country.country_name
from
    country
    join countrylanguage on country.code = countrylanguage.countrycode
where
    countrylanguage.isofficial = 'T'
group by
    country.countrycode,
    country.country_name
having
    count(*) > 2