我有一张带文件的桌子
表名:
CountriesInfo
国家 | 大陆 ------|---------- 印度 | 亚洲 中国 | 亚洲 爱尔兰 | 欧洲 英格兰 | 欧洲
- 用户将选择一个国家
- 系统应显示与所选国家/地区同一大陆的所有其他国家/地区,我只想使用 JOINS(而不是子查询)。有没有办法得到?
我有一张带文件的桌子
表名:
CountriesInfo
国家 | 大陆 ------|---------- 印度 | 亚洲 中国 | 亚洲 爱尔兰 | 欧洲 英格兰 | 欧洲
尝试这个:
您可以加入同一张表并获得结果:
select C.country
from CountriesInfo C
join
(select *
from CountriesInfo
where country='India')a
on C.continent=a.continent
系统应显示与所选国家/地区同一大陆的所有其他国家/地区,我只想使用 JOINS(而不是子查询)。有没有办法得到?
是的,这是获得它的方法。这适用于 SQL Server 和 MySQL。
SELECT DISTINCT C2.country
FROM CountriesInfo C1
JOIN CountriesInfo C2 ON C1.continent=C2.continent
WHERE C1.country='INDIA'
使用此查询自加入表:
SELECT T2.Country
FROM CountriesInfo T1
JOIN CountriesInfo T2 ON T1.Continent = T2.Continent
WHERE T1.Country = 'Ireland'
当然,您可以将参数传递给 where 子句(而不是“Ireland”)。此查询本身是自加入的,为您提供与所选国家位于同一大陆的国家/地区列表。
Select s.country
from countriesInfo R, countriesInfo S
where r.country = 'india'
and s.continent = r.continent
SELECT DISTINCT ci2.country FROM CountriesInfo ci1
JOIN CountriesInfo ci2 ON ci1.continent=ci2.continent
WHERE ci1.country=<SELECTED_COUNTRY>
这对我来说有点像家庭作业!一种方法是这样的:
DECLARE @chosenCountry VARCHAR(MAX)
SET @chosenCountry = 'India' -- Set it however you want here...
SELECT ciSameContinent.country FROM CountriesInfo ci
INNER JOIN CountriesInfo ciSameContinent ON ci.continent = ciSameContinent.continent
WHERE ci.country = @chosenCountry
AND ciSameContinent.country <> @chosenCountry -- Forgot this bit which is needed to exclude the chosen country as per the question
这满足了要求,因为它返回来自同一大陆的 OTHER 国家(并且不包括所选国家)并且不使用子选择。