Mysql查询的正确语法是什么

时间:2015-03-07 07:01:37

标签: mysql

这是两个表 -

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列既不是主键也不是自动增量字段。

3 个答案:

答案 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