根据另一个表和文件输入更新mysql表

时间:2013-09-10 04:00:31

标签: mysql sql

我在这样的文件中有一个用户名列表:

userE
userZ
userA
...

我在mysql数据库中有两个表

Users表:

| UID |  NAME |
|-----|-------|
| 101 | userQ |
| 102 | userZ |
| 103 | userA |
...

Roles表:

| UID | RID |
|-----|-----|
| 101 |  10 |
| 101 |  20 |
| 102 |  10 |
| 102 |  30 |
| 103 |  10 |
| 103 |  30 |
| 103 |  20 |
...

文件中的用户名列表需要与用户表匹配才能找出uid,如果rid=30存在该用户ID,则需要删除该行。

如果仍然不清楚,请告诉我。

1 个答案:

答案 0 :(得分:1)

一种方法是首先使用delete_users将用户名从文件加载到临时表(让我们称之为LOAD 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 演示