Обновите таблицу, выбрав данные из другой таблицы MySQL запроса - PullRequest
1 голос
/ 22 февраля 2011

У меня есть две таблицы

Стол заказов

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

Таблица Order_Details

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

Я хочу обновить статус таблицы заказов на 1, если весь статус соответствующего order_id равен 1 в таблице Order_Details. Я пытался работать с этим запросом, но он не работает, так как подзапрос возвращает более 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(*) ) 

Заранее спасибо

1 Ответ

3 голосов
/ 22 февраля 2011

Первый запрос на обновление в зависимости от статуса:

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

Второй запрос для получения:

SELECT DISTINCT order_id
FROM Order_Detail
WHERE status = 0

Примечание. Если у заказа 2 заказа, 1) со статусом = 0 и2) статус = 1. вышеупомянутый запрос будет включать этот порядок - поскольку есть строка со статусом = 0. Если вы хотите получить только идентификаторы заказа со всеми статусами = 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
...