9

同じ USERS テーブルから入力する必要がある新しい列、supervisor_id を USERS テーブルに追加しました。

ID   |  USERNAME  |  SUPERVISOR_USERNAME  |  SUPERVISOR_ID

1    |  jdoe      |  jsmith               | NULL

2    |  jsmith    |  dduck                | NULL

次のように、テーブルをループして Supervisor_id = id を設定するにはどうすればよいですか。

ID   |  USERNAME  |  SUPERVISOR_USERNAME  |  SUPERVISOR_ID

1    |  jdoe      |  jsmith               |  2

2    |  jsmith    |  dduck                | NULL

私は次のことを試しましたが、明らかに、ユーザーのsupervisor_usernameが自分のユーザー名であるsupervisor_idのみを設定しました。

update users
set supervisor_id = id
where supervisor_username = username
4

2 に答える 2

22

UPDATE複数のテーブル構文を使用して自己結合を作成できます。

UPDATE users u
  JOIN users s ON s.SUPERVISOR_USERNAME = u.USERNAME
SET    u.SUPERVISOR_ID = s.ID

sqlfiddleで参照してください。

SUPERVISOR_NAME次に、列を削除する必要があります。これは3NFに違反します。代わりに、必要に応じて、データを取得するときに別の自己結合を行うことができます。

SELECT u.ID, u.USERNAME, s.USERNAME AS SUPERVISOR_USERNAME, u.SUPERVISOR_ID
FROM   users u LEFT JOIN users s ON s.ID = u.SUPERVISOR_ID

sqlfiddleで参照してください。

于 2013-07-16T18:57:31.423 に答える