我想通过从一个表中选择一个值到另一个表中来链接两个表,它们之间没有以前的关系。
所以我的桌子是:
代码:
ID | 标签 |
---|---|
1 | 1 |
2 | 1 |
3 | 1 |
4 | 2 |
5 | 2 |
人们:
ID | 类型 | code_id |
---|---|---|
1 | 2 | X |
2 | 2 | X |
3 | 7 | X |
我想people
从表中更新表选取值codes
。每当一个项目 frompeople
具有条件label=2
时,它就需要从 中选择一个不同的 id codes
。“代码”中的代码比“人”中的人多,因此每个人都可以有不同的代码。
因此,例如结果是:
ID | 类型 | code_id | 解释 |
---|---|---|---|
1 | 2 | 4 | 用代码表中的一个值更新 |
2 | 2 | 5 | 用代码表中的另一个值更新 |
3 | 7 | X | 没有更新,因为type<>2 |
WHERE
我尝试过使用这样的 INNER JOIN,但是在使用过滤器时它不起作用:
UPDATE people A
INNER JOIN
(SELECT id FROM codes WHERE label=2) B
USING (id)
SET A.code_id=B.id
WHERE A.type=2;
我究竟做错了什么?
我准备了一个SQL Fiddle来测试以下数据:
CREATE TABLE codes (id int auto_increment primary key, label int);
CREATE TABLE people (id int auto_increment primary key, type int, code_id int);
INSERT INTO codes VALUES (1,1),(2,1),(3,1),(4,2),(5,2);
INSERT INTO people (id,type) VALUES (1,2),(2,2),(3,7);