2017-04-24 16 views
0

mysql新手需要幫助才能理解這一點想了解如何更新在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;

後上面更新查詢角色表並不在all.i改變認爲它應該像

SELECT * FROM角色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) 

謝謝...

+0

http://stackoverflow.com/questions/2334712/how-to-update-from-a-select-in-sql-server – drowned

回答

0

雖然我真的不能回答你的問題,因爲我不明白,我可以與大家分享了一些東西這可能有助於澄清你的認識:

對於任何查詢,無論是更新還是選擇你幾乎不會做到以下幾點:

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

你永遠不會這麼做的原因是因爲只用逗號連接表就會將每行連接到每一行。它不僅導致瘋狂,而且導致瘋狂。所以只要避免這樣的事情。關於它唯一一次使用的時候,是當你加入一個單一行和值的表...像一個business_date ...或其他單個值表。

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

使用上面的圖案完全避免了連接和所有與之而來的荒謬: 相反,你應該對所有連接使用下列模式。你應該總是加入東西,請記住關鍵詞。您希望始終指定表在所有查詢中應如何相互關聯 - 更新,刪除和選擇。記住這是非常關鍵的。

2.避免不唯一的id列。我真的不應該看到帶有id的表格,其中id不是唯一的。添加一個唯一的鍵到你的表中,或者將它作爲主鍵,然後你不會以重複的id混淆結束。

現在就您的具體查詢,我會採取一個總刺傷在這裏,因爲再次你的問題難以解析更多,所以你提供的價值。我假設你想讓表2的值更新表1的值。 換句話說表1目前的樣子:

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

,並在更新後,你會希望看到它看起來像下面的,因爲它會採取的表2的值,並將其匹配表1:

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

對於這樣的轉變update語句應該是這樣的:

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

反正我不知道爲什麼在大學任教的教授以c加入ommas ....但不要這樣做,你很快就會成爲SQL的主人。祝你好運!

+0

非常感謝您的快速回復..但需要更多的澄清..我有編輯問題請檢查。 – user3093845