У меня есть следующая таблица:
+------------+-----------+--------+----------+-------------+------------------+
| id | order_id | origin | type | delivery_id | return_requested |
+------------+-----------+--------+----------+-------------+------------------+
| 42 | 420 | US | DELIVERY | d-UUID | 0 |
+------------+-----------+--------+----------+-------------+------------------+
| 43 | 420 | US | RETURN | r-UUID | 1 |
+------------+-----------+--------+----------+-------------+------------------+
| 48 | 520 | US | DELIVERY | d-UUID | 0 |
+------------+-----------+--------+----------+-------------+------------------+
| 50 | 520 | US | RETURN | r-UUID | 1 |
+------------+-----------+--------+----------+-------------+------------------+
Где d-UUID
или r-UUID
- уникальные идентификаторы с префиксом (d
для доставки и r
для возврата).
В настоящее время я изменил способ вставки данных в базу данных, и вместо того, чтобы каждый раз добавлять новую строку, теперь я нахожу order_id и обновляю существующую строку.
Например, если заказ был возвращен, я теперь найду тот, у которого id = 42, и обновлю его с типа 'ДОСТАВКА' до 'ВОЗВРАТ' и с return_requested 'с ложного на истинное, в то время как delivery_id
остается то же. (два столбца type и return_requested немного избыточны, но это на другой день)
Но у меня сейчас много старых записей с delivery_id
, начинающимися с r-
, которые я хочу удалить / объединить с строки, где order_id
одинаковы.
У меня есть следующее SQL, которое находит эти строки:
SELECT * FROM delivery
WHERE order_id IN (
SELECT order_id FROM delivery
WHERE return_requested = 1
AND delivery_id LIKE '%R-%'
)
Но я не могу понять, как объединить эти строки. В конце я хочу добиться этого:
+------------+-----------+--------+----------+-------------+------------------+
| id | order_id | origin | type | delivery_id | return_requested |
+------------+-----------+--------+----------+-------------+------------------+
| 42 | 420 | US | RETURN | d-UUID | 1 |
+------------+-----------+--------+----------+-------------+------------------+
| 48 | 520 | US | RETURN | d-UUID | 1 |
+------------+-----------+--------+----------+-------------+------------------+
EDIT: я зацикливался на операторе обновления / удаления, который изменяет данные в базе данных, а не на операторе SELECT.