-1

次のようなファイルにユーザー名のリストがあります。

ユーザーE
ユーザーZ
ユーザーA
...

mysql データベースに 2 つのテーブルがあります

Usersテーブル:

| | UID | 名前 |
|-----|-------|
| | 101 | ユーザー Q |
| | 102 | ユーザー Z |
| | 103 | ユーザーA |
...

Rolesテーブル:

| | UID | 取り除く |
|-----|-----|
| | 101 | 10 |
| | 101 | 20 |
| | 102 | 10 |
| | 102 | 30 |
| | 103 | 10 |
| | 103 | 30 |
| | 103 | 20 |
...

ファイルからのユーザー名のリストは、ユーザー テーブルと一致して特定する必要があり、そのユーザーuidID が存在する場合はrid=30、その行を削除する必要があります。

これがまだ明確でない場合はお知らせください。

4

1 に答える 1

1

それを行う1つの方法は、最初にファイルからユーザーの名前を一時テーブルにロードすることです( と呼びますdelete_usersLOAD DATA INFILE

CREATE TABLE delete_users (`name` varchar(32));

LOAD DATA INFILE '/tmp/delete_users.txt' 
INTO TABLE delete_users
LINES  TERMINATED BY '\n' -- or most likely '\r\n' if it's Windows
(@name)
SET name = TRIM(@name);

次に、クエリを使用します

DELETE r
  FROM roles r JOIN users u
    ON r.uid = u.uid JOIN delete_users d
    ON u.name = d.name
   AND r.rid = 30;

そして最後にドロップdelete_usersテーブル

DROP TABLE delete_users;

これがSQLFiddleのデモです

于 2013-09-10T04:16:21.657 に答える