2017-07-27 25 views
0
私は内部結合を使用して、別のテーブルからの私のテーブルを更新したい

を使用して参加MySQLの内部には、非ユニークID

問合せ:

UPDATE XYZ INNER JOIN ABC on ABC.Id = XYZ.Id 
     SET XYZ.Std = ABC.Std 

サンプルデータ:

表XYZ

  ID               STD 

401471 QWERTY1  0 13.381 2013-01-01 00:00:00 2002-06-01 00:00:00 0 0 0 2002-06-01 00:00:00 2005-05-31 00:00:00 
401472 QWERTY2  0 13.488 2013-01-04 00:00:00 2002-06-01 00:00:00 0 0 0 2002-06-01 00:00:00 2005-05-31 00:00:00 
401473 QWERTY3  0 13.465 2013-01-07 00:00:00 2002-06-01 00:00:00 0 0 0 2002-06-01 00:00:00 2005-05-31 00:00:00 

表ABC

ID            STD Q W 

QWERTY1 2002-06-01 00:00:00 2005-05-31 00:00:00 0 0 0 
QWERTY2 2002-07-01 00:00:00 2005-06-30 00:00:00 0 0 0 
QWERTY3 2002-08-01 00:00:00 2005-07-31 00:00:00 0 0 0 

IDはプライマリキーではなく、繰り返しIDで1.5百万件以上のレコードがあり、日付が異なるため繰り返されます。

私のクエリが機能していないので、接続が失われてしまいました。2013年に600から6000にタイムアウトを変更しようとしましたが、クラウドにあるdbサーバーのタイムアウトを変更できませんでした。

質問が正しい場合は誰でも教えてください。はいの場合接続が失われるのはなぜですか?

質問が正しい場合は、チャンクでそれを行うことはできますか?

答えて

0

はこれを試してみてください -

UPDATE XYZ 
set XYZ.std = ABC.std 
from XYZ inner join ABC on XYZ.id = ABC.id 
+0

クエリが間違って実行できませんでした –

0

クエリを使用すると、タイムアウトを持つことでしょう理由です実行に時間がかかりすぎている可能性があります。クエリは一例であり、上記あなたは、チャンクを作成するために、他のパラメータを使用することができます

UPDATE XYZ 
    INNER JOIN ABC on ABC.Id = XYZ.Id 
    SET XYZ.Std = ABC.Std 
    WHERE ABC.Id between 1 AND 50000; 

:のようなあなたのクエリに範囲を設定することにより、チャンクでそれを行うことができます。あなたが行うことができます

+0

私のIDは英数字ですので、範囲を設定することはできません –

+0

あなたは整数の基礎を持っていませんテーブルの 'PK'を編集しましたか? – Shaharyar

+0

はいAI idがありますが、150万行ですが、どのくらいの範囲を設定できますか? –

0

:MySQLで

UPDATE XYZ INNER JOIN ABC on ABC.Id = XYZ.Id 
     SET XYZ.Std = ABC.Std; 

as desicribed here)が、それはあなたがid列にインデックスを設定しているか あなたは行う必要はありません

ネイティブANSI SQL

ではありません?それは主ですが、インデックスがあるはずです

+0

私のIDは英数字で一意ではないのでインデックスを設定できますか?それは私が推測することはできません。 –

+0

MyISAMまたはInnoDBを持っている場合は [TABLENAME]([COLUMNNAME])の全文索引[INDEXNAME]を作成してください。 –

+0

https://dev.mysql.com/doc/refman/5.7/en/create-index.html –

関連する問題