私はテーブルpeople
(特に)フィールドgivenName
とgender
を持っています。私はgender=NULL
ですべての行を更新するには、他の行に基づいて推測するのが最適です。複雑なSQLクエリが必要
"John", "male"
"Jane", "female"
"Sam", NULL
"Alex", "female"
"Jack", NULL
...
それはかどうかは不明で残っているのに対し、だから、ジョンが正しくジェーンは、女性として、男性として識別されています。私は、次の変更を生成したいtehの次の行
"John", NULL
"Jane", NULL
"Sam", NULL
"Alex", NULL
"Jack", NULL
"John", "male"
"John", "male"
"Jane", "female"
"Sam", "female"
"Sam", "male"
"Alex", "female"
がある場合は、され SamはSamanthaまたはSamuelです。私は私のアプローチの欠点を認識しています(つまり、Alexは実際には男性かもしれません。よく知られている男性名Jackはそのように認識されません)。でも、私の目標が単一のSQLクエリで達成できるかどうか疑問です。
それが(例えば、「サム」など)混合例がなかったら、私はUPDATE people A, people B SET A.gender = B.gender WHERE A.givenName=B.givenName AND A.gender IS NULL and B.gender IS NOT NULL
はそれを行うべきであると仮定...
私はそれについて単一の質問についてはわかりません。まず、 "givenname"と "gender(nullではない)"というグループが必要です... "givenname"で2番目のレベルのグループの後にCOUNT(*)= 1(これは男性/女性の両方ではないことを意味します。その後、あなたはテーブル内に "曖昧さのないジェンダーの名前のマップ"しか持たないでしょう。 – laser
@laser言い換えれば、(人間の読者とメンテナーにとっては)おそらく、曖昧な名前? –
はい、私はそうだと思います。そうでなければ、新しい読者のためにロケット科学になるでしょう=) – laser