私はそれが問題ではないことを知っています...とにかくここに問題があります。
このような1つのテーブルを持つデータベースを継承しました。その目的は、さまざまな(200の奇数)国で見つかった種を記録することです。
ID
Species
Afghanistan
Albania
Algeria
American Samoa
Andorra
Angola
....
Western Sahara
Yemen
Zambia
Zimbabwe
データのサンプルは次のようになります
id Species Afghanistan Albania American Samoa
1 SP1 null null null
2 SP2 1 1 null
3 SP3 null null 1
これは典型的な多対多の状況であり、3つのテーブルが必要なようです。種、国、およびSpeciesFoundInCountry
リンクテーブル(SpeciesFoundInCountry)には、speciesテーブルとCountryテーブルの両方に外部キーがあります。
(図を描くのは難しいです!)
Species
SpeciesID SpeciesName
Country
CountryID CountryName
SpeciesFoundInCountry
CountryID SpeciesID
元のメガテーブルに1がある列名とSpeciesIDに基づいて、新しいCountryテーブルからCountryIDを取得する挿入ステートメントを生成する魔法の方法はありますか?
私は1つの国のためにそれを行うことができます(これは私が欲しいものを示すための選択です)
SELECT Species.ID, Country.CountryID
FROM Country, Species
WHERE (((Species.Afghanistan)=1)) AND (((Country.Country)="Afghanistan"));
(メガテーブルは種と呼ばれます)
ただし、この戦略を使用すると、元のテーブルの各列に対してクエリを実行する必要があります。
SQLでこれを行う方法はありますか?
where句をまとめて、またはSQLを作成するためのスクリプトを作成することはできますが、エレガントではないようです。
何か考え(または説明が必要)?