查询是:显示具有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)
此表格还有一些属性,但我们现在不需要它们来回答此问题。
答案 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