私はfiledsのテーブルを持っています
テーブル名:
CountriesInfo
国| 大陸 -------- | ---------- インド| アジア 中国| アジア アイルランド| ヨーロッパ イギリス| ヨーロッパ
- ユーザーは国を選択します
- システムは、選択した国と同じ大陸にある他のすべての国を表示する必要があります。JOINSのみを使用します(サブクエリではありません)。取得する方法はありますか?
私はfiledsのテーブルを持っています
テーブル名:
CountriesInfo
国| 大陸 -------- | ---------- インド| アジア 中国| アジア アイルランド| ヨーロッパ イギリス| ヨーロッパ
システムは、選択した国と同じ大陸にある他のすべての国を表示する必要があります。JOINSのみを使用します(サブクエリではありません)。取得する方法はありますか?
はい、これがそれを取得する方法です。これは、SQLServerとMySQLの両方で機能します。
SELECT DISTINCT C2.country
FROM CountriesInfo C1
JOIN CountriesInfo C2 ON C1.continent=C2.continent
WHERE C1.country='INDIA'
これを試して:
同じテーブルで結合して結果を得ることができます:
select C.country
from CountriesInfo C
join
(select *
from CountriesInfo
where country='India')a
on C.continent=a.continent
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>
このクエリを使用して、テーブルを自己結合します。
SELECT T2.Country
FROM CountriesInfo T1
JOIN CountriesInfo T2 ON T1.Continent = T2.Continent
WHERE T1.Country = 'Ireland'
もちろん、(「アイルランド」の代わりに)where句にパラメータを渡すことができます。このクエリはそれ自体が自己結合であり、選択した大陸と同じ大陸にある国のリストを提供します。
これは私には宿題のように見えます!これを行う1つの方法は、次のようになります。
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
これは、同じ大陸から他の国を返し(選択した国を除外し)、サブセレクトを使用しないため、要件を満たします。