我有users
表映射到schools
表。
但是,最近我引入了一个courses
表,现在映射到schools
表。
我试图打破用户和学校之间的关系,并通过课程将它们联系起来。
我正在尝试使用连接更新users
表中受影响的行,但是没有更新任何行。我也没有看到任何错误消息。
当我使用相同的查询来选择匹配的行时,它会获取20行。
更新查询失败的可能原因是什么?我检查并验证了有些行需要更新。
更新查询:
UPDATE users INNER JOIN courses ON users.course_id = courses.school_id SET users.course_id = courses.id
选择查询:
SELECT * FROM users INNER JOIN courses on users.course_id = courses.school_id
可能是因为我试图更新JOIN子句中使用的相同字段吗?
修改
表结构:
学院:
id | name
--------------
1 | St. Joseph\'s
2 | St. Mary\'s
课程:
id | school_id
--------------
1 | 1
2 | 1
3 | 2
用户:
id | name | course_id
---------------------
1 | Ray | 1
2 | Jake | 1
3 | Sam | 1
注意:
users.course_id
实际上现在已映射到schools.id
。
需要将其映射到courses.id
。
答案 0 :(得分:0)
确实,SQL首先检索与您的连接匹配的行。由于users.course_id没有值,因此不会检索任何行。
你可能想要这样的东西:
UPDATE Users
SET users.course_id = courses.id
FROM users
INNER JOIN courses
on users.school_id= courses.school_id
在这个查询中,我假设用户有一个school_id(从最初的两个表情况)。请注意,您的SELECT语句具有以下连接:
users.course_id = courses.school_id
可能应该是(??)
users.school_id = courses.school_id
答案 1 :(得分:0)
嗯..更新声明“有效”但你的逻辑没有。
drop table if exists courses;
create table courses (id int, school_id int);
insert into courses values
(10 , 1),
(2 , 1),
(3 , 2);
drop table if exists Users;
create table users (id int, name varchar(4), course_id int);
insert into users values
(1 ,'Ray' , 1),
(2 ,'Jake', 1),
(3 ,'Sam' , 1);
UPDATE users INNER JOIN courses ON users.course_id = courses.school_id SET users.course_id = courses.id ;
select * from users;
结果
+------+------+-----------+
| id | name | course_id |
+------+------+-----------+
| 1 | Ray | 10 |
| 2 | Jake | 10 |
| 3 | Sam | 10 |
+------+------+-----------+
3 rows in set (0.00 sec)
这是预期的。