0

私は決してMySQLの専門家ではありません。そうは言っても、クロステーブルマッチングとデータ更新で問題が発生しました。投稿する前にかなり長い間検索していたと信じてください。しかし、見つけたすべてのソリューションは、テーブルの結合について言及しており、試したときにクエリがフリーズし続けました。

以下のクエリは、操作したいすべてのデータを選択します。

SELECT t1.1, t2.1, t1.2, t2.2, t1.3, t2.3, t1.4, t2.4
FROM t1, t2
WHERE 
t1.1='1111111' &&
t1.1 = t2.1 &&
t1.2 = t2.2 &&
t1.3 = t2.3 &&
t1.4 = t2.4 &&
;

これはうまく機能しているようで、私が見たいものを示しています。ただし、次に、上記の結果に基づいてt1からの追加の列とt2からの列を更新したいので、そこで行き詰まります。

これを、同様のWHEREセクションを使用するある種の更新クエリに変換できますが、t1とt2の両方から列(追加の列、たとえばt1.5とt2.5)を更新することもできますか?

これらのテーブルにはすべて同じ列があるわけではありませんが、WHEREの上記のすべてが重複していることに注意してください

4

2 に答える 2

0

あなたは次のようなことをすることができます

UPDATE t1
SET ...
WHERE id IN (
  SELECT a.id
  FROM t1 a, t2 b
  WHERE
    a.1 = '1111111' AND
    a.1 = b.1 AND
    a.2 = b.2 AND
    a.3 = b.3 AND
    a.4 = b.4 AND
)

UPDATEクエリは、大きくてJOINyのサブクエリを使用すると、すっきりときれいになります。

あなたのSET部分がどのように見えるかわからないので、これがうまくいくかどうかはわかりません。

于 2013-03-26T20:49:23.070 に答える
0

結局、私が試したすべてのことはおそらくうまくいったでしょう。ただし、使用していたデータベース/テーブルにはインデックスが作成されていませんでした。私のクエリはハングしているように見えましたが、実際には、おそらく何年もかけて終了していました。

次に、1つのテーブルの値の一部が、intではなくvarcharとして設定されました。これを修正するまで、インデックス作成でさえこれらの比較に役立ちませんでした。

上記の更新後、ほんの一瞬で、次のクエリを使用してこれを機能させることができました。

UPDATE t1, t2
SET t1.5="x", t2.5="x"
FROM t1, t2
WHERE 
t1.1='1111111' &&
t1.1 = t2.1 &&
t1.2 = t2.2 &&
t1.3 = t2.3 &&
t1.4 = t2.4 &&
;
于 2013-03-29T16:59:25.390 に答える