0

私はかなり有能な SQL プログラマーですが、私のスキルはまだ単純な INSERT、SELECT、UPDATE ステートメントの領域にあり、時折 LIKE などがスローされます。現在私がやろうとしていることは、かなり複雑です。これがシナリオです。

  1. 私は3つのテーブルを持っています。
  2. 表 1 は*users*、ユーザー ID uidによってユーザーを識別します。ユーザーは 1 つ以上のサブアカウントを持つことができます
  3. 表 2*accounts*には、各ユーザーのサブアカウントの記録が保持されています。とりわけ、列uidsid ( uid*users*表で定義されている列) を使用しています。
  4. 表 3*data*は現在、特定のサブアカウントsidに関連付けられているデータ列にいくつかのデータを格納しています。

私が今気づいたことは、ユーザーがサブアカウント間でこれらのデータを使用することをブロックする特別な理由がないということです. 問題ありません。データ サブセット検索 SQL を変更して、代わりにuidで動作するようにできます。ただし、このような検索の頻度を考えると、単純にuid列に固執するだけの価値があるように思われ*data*ます。

そのためには、テーブルから uid と sid のペアを取得し、その情報を使用してデータテーブル*accounts*内の新しく作成された uid 列を更新するスマートな SQL を作成する必要があります。これは、SQL に関する私の知識を超えていることを認めなければなりません。

これらのデータを使用するシステムは現在運用中であり、数百人のユーザーがいるため、ユーザーが存在しないかのように振る舞うというオプションはありません。あまり関連性がないと思いますが、uidsidは英数字の文字列であり、両方の列にインデックスが付けられていることに言及する必要があります。

ここで、それを手伝ってくれる人に心から感謝します。

4

1 に答える 1

0

Mysql は、結合に基づいて、スキーマの読み取りに基づいて更新を行うことができます。これが私が行うことです...

UPDATE accounts a, data d
set d.uid=a.uid
where a.sid=d.sid
and d.uid is NULL
于 2013-06-07T12:58:52.633 に答える