Mam tabelę z polem, które czasami zawiera wiele tablic w formacie JSON.
MYSQL 8.0.11
Dll.
CREATE TABLE T
(`user` varchar(4), `sales` int, `reference` varchar(400) DEFAULT NULL, `quantity` float DEFAULT NULL, `orders` int)
;
Dane
INSERT INTO T
(`user`, `sales`, `reference`, `quantity`, `orders`)
VALUES
('xx01', 100, '[{"productid":"80000052","quantity":"1","reference":"ML-41"},{"quantity":1,"reference":"ML-32","productid":"ML-52"},{"productid":"80000052","quantity":3,"reference":"ML-11"}]', 0, 0),
('xx02', 200, '[{"productid":"80000052","quantity":2}]', 0, 0),
('xx02', 400, '[{"productid":"80000052","quantity":3}]', 0, 0),
('xx03', 300, '[{"productid":"80000052","quantity":4}]', 0, 0),
('xx03', 500, '[{"productid":"80000052","quantity":5}]', 0, 0)
;
Następujące zapytanie aktualizuje pole „quantity” wartością „quantity” w tablicach JSON pola „referencje”:
UPDATE T t2,
( SELECT sales, quant FROM T, JSON_TABLE(T.reference,
"$[*]" COLUMNS(
quant VARCHAR(400) PATH "$.quantity"
)
) AS jt1
) t1
SET t2.quantity = t1.quant
WHERE t1.sales = t2.sales;
Zapytanie pobiera „ilość” z pierwszej tablicy pierwszego wiersza i ignoruje kolejne 2 tablice w polu „odwołanie” tego wiersza.
Czy istnieje sposób na zsumowanie „ilości” wszystkich 3 tablic pola „odniesienia” pierwszego wiersza?
1 odpowiedź
Zamiast WHERE użyj JOIN ... ON plus GROUP BY i SUM() AS
UPDATE T t2
JOIN (SELECT sales, SUM(quant) AS qu FROM T, JSON_TABLE(T.reference,
"$[*]" COLUMNS(
quant VARCHAR(400) PATH "$.quantity"
)
) AS jt1
GROUP BY sales) t1
ON t2.sales = t1.sales
SET t2.quantity = t1.qu;
Podobne pytania
Nowe pytania
mysql
MySQL to darmowy system zarządzania relacyjnymi bazami danych (RDBMS) o otwartym kodzie źródłowym, który wykorzystuje język SQL (Structured Query Language). NIE UŻYWAJ tego znacznika dla innych baz danych, takich jak SQL Server, SQLite itp. Są to różne bazy danych, które używają własnych dialektów SQL do zarządzania danymi.