想了解更新如何在mysql中运行

时间:2017-04-24 22:14:00

标签: mysql sql

mysql的新手需要帮助才能理解这个

SELECT * FROM roles1 r1;

result 
id role
1  ROLE_SELLER1
1  ROLE_SELLER2
1  ROLE_SELLER3
2  ROLE_SELLER4
2  ROLE_SELLER5

SELECT * FROM roles r1;

result
id role
1  ROLE_SELLER1
2  ROLE_SELLER4

UPDATE roles1 r1,roles r SET r.role = r1.role WHERE r.id = r1.id;

在上面的更新后,查询角色表根本没有改变。我认为它应该像

SELECT * FROM roles r1;

   result
   id role
   1  ROLE_SELLER3
   2  ROLE_SELLER5

SELECT r。,r1。 FROM roles r RIGHT JOIN roles1 r1 ON r.id = r1.id;

    result 
    id role                                id role
    1  ROLE_SELLER1         1  ROLE_SELLER1
    1  ROLE_SELLER1         1  ROLE_SELLER2
    1  ROLE_SELLER1         1  ROLE_SELLER3
    2  ROLE_SELLER4         2  ROLE_SELLER4
    2  ROLE_SELLER4         2  ROLE_SELLER5

更新角色r在r.id = r1.id上加入角色r1 set r.role = r1.role; 我想当我使用它时它应该像

那样更新角色表
   result
    id role
    1  ROLE_SELLER3 (last matched value from roles1 table id 1)
    2  ROLE_SELLER5(last matched value from roles1 table id 1)

先谢谢...

1 个答案:

答案 0 :(得分:0)

虽然我无法回答你的问题,因为我无法理解,但我可以与你分享一些可能有助于澄清你理解的事情:

1。对于任何查询,无论是更新还是选择,您几乎都不会执行以下操作:

select * from table1, table2 ....
update * from table1, table2 ....

你永远不会这样做的原因是因为只用逗号连接表会将每一行完全交叉连接到每一行。它不仅导致疯狂,而且导致过多的疯狂。所以只是避免这样的事情。关于它曾经使用的唯一时间是当你加入一个包含单行和值的表时...就像business_date ......或者其他一些单值表。 相反,您应该对所有连接使用以下模式:

select * 
from table1 t1
join table2 t2 on t1.id = t2.id
...

使用上述模式可以避免完全加入以及与之相关的所有荒谬。你应该总是加入 on 的东西,记住上的关键词。您希望始终指定表在所有查询中应如何相互关联 - 更新,删除,选择。记住这是非常关键的。

2。避免使用不唯一的id列。我真的不应该看到id为id的表,其中id不是唯一的。在表格中添加一个唯一的密钥或将其作为主键,然后您就不会出现重复的ID混淆。

现在回到你的特定查询,我将在这里进行一次总体攻击,因为你提出的问题再次提出你的问题措辞难以解析。我假设您希望表2的值更新表1的值。 换句话说,table1目前看起来像:

id role
1  ROLE_SELLER1
1  ROLE_SELLER2
1  ROLE_SELLER3
2  ROLE_SELLER4
2  ROLE_SELLER5

在更新之后,您将希望看到它如下所示,因为它将获取table2的值并将它们与table1匹配:

id role
1  ROLE_SELLER1
1  ROLE_SELLER1
1  ROLE_SELLER1
2  ROLE_SELLER4
2  ROLE_SELLER4

此类转换的更新语句如下所示:

update roles r
join roles r1 on r.id = r1.id
set r.role = r1.role;

无论如何,我不确定为什么大学的教授会加入逗号......但是不要这样做,你很快就会成为SQL的大师。祝你好运!