这是两个表 -
table1 wp_posts-
ID post_type
1078 soto_user
1079 soto_user
1080 soto_user
table2 usuario
ID post_type
0 soto_user
0 soto_user
0 soto_user
我希望table2为 -
ID post_type
1078 soto_user
1079 soto_user
1080 soto_user
我尝试过这种语法但没有用 -
UPDATE usuario
LEFT JOIN wp_posts
ON usuario.post_type=wp_posts.post_type
SET usuario.ID = wp_posts.ID
上述查询的正确语法是什么。 table2中的ID列既不是主键也不是自动增量字段。
答案 0 :(得分:0)
此处post_type
不是唯一列进行连接。如果你进行连接,table1
的每一行将加入3行table2
,这会导致行的膨胀。
如果您要查找与table1
相同的表格,可以使用以下方法:
create table table2
select * from table1;
答案 1 :(得分:0)
使用以下查询。 如果您没有使用安全模式进行更新,则此查询应该 (更新没有使用密钥列的位置的表)
要禁用安全模式,请在首选项中切换选项 - > SQL编辑器 - >查询编辑器和重新连接
UPDATE usuario u
JOIN wp_posts w
ON u.post_type=w.post_type
SET u.id = w.id;
但这并没有被推荐。
您可以在查询中使用where子句
UPDATE usuario u
JOIN wp_posts w
ON u.post_type=w.post_type
SET u.id = w.id;
where u.id = 0
答案 2 :(得分:-1)
我认为你应该使用cursor来更新所有记录。
DECLARE ID INT,
DECLARE POSTTYPE VARCHAR
DECLARE CURSOR crs_wp_posts FOR SELECT ID,POSTTYPE
OPEN crs_wp_posts
FETCH crs_wp_posts INTO ID, POSTTYPE
UPDATE usuario SET usuario.Id = ID WHERE usuario.Id = (SELECT TOP 1 Id FROM usuario WHERE usuario.Id = 0)
CLOSE crs_wp_posts