2

奇妙な SQL が実行されています。クエリは次のとおりです。

UPDATE sugarcrm.qb_salesorders_leads_c c
JOIN qb_salesorders orders ON c.qb_salesorders_leadsqb_salesorders_idb = orders.id
SET c.qb_salesorders_leadsleads_ida = orders.memo
AND c.qb_salesorders_leadsqb_salesorders_idb = orders.id

したがって、これを実行すると、影響を受ける行は0になります。AND を に置き換えると、戻ってきて 354 行が影響を受けると表示されます。

でまったく同じクエリを実行すると、同じ結果が得られると思うでしょう。違う。0 行が影響を受けて戻ってきます。

その後、 , を AND に変更すると、再び機能します。

MySQL のバグを発見しましたか、それとも何か不足していますか?

4

3 に答える 3

1

AND は、実行しようとしているものに対して有効な構文ではありません。更新しようとしている各列をカンマで区切ります。

于 2012-05-22T20:57:53.127 に答える
1

コンマを使用して構文的に正しいクエリを初めて実行したとき、354 行が正しく影響を受けました。2 回目に影響を受けた 0 行で返される理由は、最初にクエリを実行したときに行が既に更新されているためです。

列の値がUPDATEクエリによって変更されない場合、MySQL は行を更新せず、影響を受ける行にカウントされません。値が実際に変化するものだけがカウントされます。

于 2012-05-22T20:59:15.653 に答える
0

あなたはすでに c.qb_salesorders_leadsqb_salesorders_idb = orders.id に参加しています。したがって、「AND c.qb_salesorders_leadsqb_salesorders_idb = orders.id」を使用して結果をフィルタリングしている場合、これは間違った構文であり、不必要です。これは JOIN 句で処理されるためです。

AND 句で指定されたフィールドを設定する場合、結合は、(結合に基づいて) それらの値が既に等しい行のみを更新します。ここで確認できる唯一の修正は、クエリ自体でエラーが発生する以外に影響がないため、「AND」句を削除するだけでよいということです。

 UPDATE sugarcrm.qb_salesorders_leads_c c 
 JOIN qb_salesorders orders ON c.qb_salesorders_leadsqb_salesorders_idb = orders.id 
 SET c.qb_salesorders_leadsleads_ida = orders.memo

さらに、複数のフィールドを更新するには、それらをコンマ (AND ではなく) で区切る必要があります。

UPDATE sugarcrm.qb_salesorders_leads_c c 
JOIN qb_salesorders orders ON c.qb_salesorders_leadsqb_salesorders_idb = orders.id 
 SET c.qb_salesorders_leadsleads_ida = orders.memo, c.anotherfield = "new value"
于 2012-05-22T21:02:59.790 に答える