1

私は2つのテーブルを持っています

注文表

or_id  count status
1        2    0
2        3    0
3        2    0

Order_Detail テーブル

ordetail         or_id    status
    1               1         1
    2               1         1
    3               2         0
    4               2         1
    5               2         1
    6               3         1
    7               3         1

Order_Details テーブルで対応する order_id のすべてのステータスが 1 の場合、注文テーブルのステータスを 1 に更新したい

UPDATE order o JOIN order_detail od ON o.or_id = od.or_id SET o.Status = 1 WHERE 
o.or_id= (SELECT or_id FROM order_detail GROUP BY or_id 
HAVING SUM(status = 1) = COUNT(*) ) 

前もって感謝します

4

1 に答える 1

3

ステータスに基づいて更新する最初のクエリ:

UPDATE `order` o
  JOIN Order_Detail od ON o.or_id = od.order_id
SET o.Status = 1
WHERE od.Status = 1 

取得する2番目のクエリ:

SELECT DISTINCT order_id
FROM Order_Detail
WHERE status = 0

注:注文に2つのorder_detailsがある場合、1)ステータス= 0および2)ステータス= 1の場合、上記のクエリにはその注文が含まれます-ステータス= 0の行があるためです。注文IDのみを取得する場合は、すべてステータス=0です。次に、次のクエリを使用します。

SELECT order_id
FROM Order_Detail
GROUP BY order_id
HAVING SUM(status = 0) = COUNT(*)

更新:コメントによると、すべての注文の詳細が1の場合にのみステータス= 1に設定するため、次の更新クエリを使用します。

 UPDATE `order` o
  JOIN (
    SELECT order_id
    FROM Order_Detail
    GROUP BY order_id
    HAVING SUM(status = 1) = COUNT(*)
  ) og ON o.or_id = og.order_id
SET o.Status = 1
于 2011-02-22T19:03:12.587 に答える