0

3 つのレコード フィールドの成功に基づいて単一のレコードを更新できるクエリを記述できますか。

例えば

最初のテーブル: table1

最初のテーブル フィールド

ID INT

名前varchar

status enum('full', 'half') デフォルト Null

2 番目のテーブル: table2

2 番目のテーブル フィールド

ID INT

table1_id int - 外部キー

数量 1 整数

数量 2 整数

============

表1

1

テスト

ヌル

テーブル2

ID - > 1

table1_id -> 1

数量1 -> 1

数量2 - > 2


ID - > 2

table1_id -> 1

数量1 -> 2

数量2 - > 2

===============

一対多の関係

表 1 --> 表 2

=======================

(table1 の) status フィールドを「Full」に更新する条件は、 table2 の table1_id のすべてのレコードについて、 Qty1 == qty2 (table1_id のすべてのレコード) および qty2 !=0 です。

そうでなければ「半分」に残ります

4

1 に答える 1

1

各レコードをテストするブール式の をTable2取得して集計すると、結果は一致するレコードの数になります ( はおよびに変換されるため)。したがって、一致するレコードの数がレコードの総数と等しいことを確認するだけで済みます。SUM()TRUE1FALSE0

UPDATE Table1 SET status = (
  SELECT IF(SUM(Qty1=Qty2 AND Qty2!=0) = COUNT(*), 'full', 'half')
  FROM   Table2
  WHERE  table1_id = Table1.id
)

sqlfiddleで参照してください。

于 2012-10-11T12:16:18.317 に答える