add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE `Orders` (
`Id` int NOT NULL,
`Customer` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
`Value` decimal(9,2) NOT NULL,
PRIMARY KEY (Id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

CREATE TABLE `OrderItems` (
`Id` int NOT NULL,
`OrderId` int NOT NULL, -- FK to Order (Id)
`Qty` int NOT NULL,
`Price` decimal(9,0) NOT NULL,
`Total` decimal(9,2) NOT NULL,
PRIMARY KEY (Id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

INSERT INTO Orders VALUES
(1, 'Joe BLoggs', 120.00),
(2, 'Sam Rockstar', 140.00),
(3, 'Jack Jones', 0.00);

INSERT INTO OrderItems VALUES
(1, 1, 3, 20, 60),
(2, 1, 2, 30, 60),
(3, 2, 2, 35, 70),
(4, 2, 1, 70, 70);

Records: 3  Duplicates: 0  Warnings: 0
Records: 4  Duplicates: 0  Warnings: 0
SELECT JSON_PRETTY(
JSON_OBJECT(
'Orders', JSON_ARRAYAGG(
JSON_OBJECT(
'Id', o.Id,
'Customer', o.Customer,
'Value', o.Value,
'Items', o.Items
)
)
)
) AS result
FROM (
SELECT Orders.Id, Orders.Customer, Orders.Value,
JSON_ARRAYAGG(
JSON_OBJECT(
'Id', OrderItems.Id,
'Qty', OrderItems.Qty,
'Price', OrderItems.Price,
'Total', OrderItems.Total
)
) AS Items
FROM Orders JOIN OrderItems ON Orders.Id = OrderItems.OrderId
GROUP BY Orders.Id
UNION
SELECT Orders.Id, Orders.Customer, Orders.Value,
JSON_ARRAY() AS Items
FROM Orders LEFT OUTER JOIN OrderItems ON Orders.Id = OrderItems.OrderId
WHERE OrderItems.OrderId IS NULL
) AS o;
result
{
  "Orders": [
    {
      "Id": 1,
      "Items": [
        {
          "Id": 1,
          "Qty": 3,
          "Price": 20,
          "Total": 60.00
        },
        {
          "Id": 2,
          "Qty": 2,
          "Price": 30,
          "Total": 60.00
        }
      ],
      "Value": 120.00,
      "Customer": "Joe BLoggs"
    },
    {
      "Id": 2,
      "Items": [
        {
          "Id": 3,
          "Qty": 2,
          "Price": 35,
          "Total": 70.00
        },
        {
          "Id": 4,
          "Qty": 1,
          "Price": 70,
          "Total": 70.00
        }
      ],
      "Value": 140.00,
      "Customer": "Sam Rockstar"
    },
    {
      "Id": 3,
      "Items": [],
      "Value": 0.00,
      "Customer": "Jack Jones"
    }
  ]
}