2017-04-24 19 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が、ロールはr.role = r1.role WHERE r.id = r1.id集合r。上記更新クエリの役割表の後

は、それが役割R1から

SELECT *のようにする必要があります考えall.iで変更されません。

result 
    id role 
    1 ROLE_SELLER3 
    2 ROLE_SELLER5 

SELECT r。 、r1。 FROMロールr RIGHT JOINロール1 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 

update role rロールに参加するr1.id = r1.id set r.role = r1.role; 私はあなたと一緒にいくつかのことを共有することができ、それを理解できないので、私は本当にあなたの質問に答えることはできませんが、私は

+0

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

答えて

0

...私はこれを使用する場合、それはADVで

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.またはあなたが、ほぼ次の操作を行うことは決してありません選択:

select * from table1, table2 .... 
update * from table1, table2 .... 
それはあなたの理解を明確に役立つかもしれません

これを実行しないのは、カンマだけで表を結合すると、すべての行がすべての行に完全なクロス結合を行うためです。それは狂気だけでなく、あまりにも狂気のようにもなります。だから、そんなことは避けてください。これまで使用されていた唯一の時間は、business_date ...などの単一の行と値を持つテーブルに参加するときです。 すべての結合のための代わりに使用すると、次のパターンを使用する必要があります。

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

を上記のパターンを使用することで、フル参加し、彼らと一緒に行くすべてのridiculousness避けることができます。 はいつもに登録してください。に覚えておいてください。すべてのクエリ(更新、削除、選択)でテーブルを相互に関連付ける方法を常に指定する必要があります。これは非常に重要であることを忘れないでください。

2.一意ではないID列は使用しないでください。 IDが一意でないIDを持つテーブルは実際には表示されません。テーブルにユニークなキーを追加するか、プライマリキーにすると、重複するIDの混乱を招くことはありません。

あなたの特定のクエリについて、ここではあなたの質問を再度解読することができます。あなたが提供する価値によって、言葉遣いを解析するのは困難です。表2の値で表1の値を更新したいとします。

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

、それは表2の値を取り、TABLE1にそれらをマッチしていますので、あなたはそれが次のようになり見たいとしている更新後:

つまり は、現在のように見える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; 

とにかく大学の教授が教える、なぜ私はわからないが、Cと結合しますあなたはすぐにSQLのマスターになるでしょう。がんばろう!

+0

クイック返信のおかげでたくさんありましたが、もっと明確にする必要があります。編集して質問してください。 – user3093845

関連する問題