2つのテーブルを組み合わせる必要があります。このmySQLクエリをどのように攻撃できますか?
最初のテーブルはPeople(SSN PRIMARY KEY、fname、lname)です。
他のテーブルはCities(name、cityID)です。ここでname = "fname lname"、つまりPeopleの2列が間にスペースを入れて連結されています。 1人に複数の都市が関連付けられていて、都市には複数の人がいる場合があります(多数 - 多く)。
2つをテーブルPeopleCities(SSN、cityID)に結合します。ある都市で人が見つからない場合は、そのcityIDのSSNを0にする必要があります。私の経験は主にMySQLよりもsqliteを使用しているため、私は自分のクエリには自信がありません。ここで
は私のクエリです:
SELECT ISNULL(People.SSN, 0), Cities.cityID
FROM People
FULL OUTER JOIN Cities
ON (Cities.name = CONCAT_WS(" ", People.fname, " ", People.lname) FROM People);
あなたが本当にする必要がデータを再構築します。正しい[データベース正規化](http://ja.wikipedia.org/wiki/Zero_one_infinity_rule) [http://en.wikipedia.org/wiki/Database_normalization]の[ゼロ、1または無限大ルール](http://en.wikipedia.org/wiki/Zero_one_infinity_rule)を試してください。またはクエリを書くことははるかに難しくなります。名前の代わりにIDフィールドで参照できないのはなぜですか? [人々は名前を変えます](http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/)、データベースはすぐに同期しなくなります。 – tadman
市のテーブルに 'name'カラムがあると、人が見つからないのは奇妙に思えます。 –