Подзапрос возвращает более 1 строки MySQL? - PullRequest
0 голосов
/ 18 февраля 2020
SELECT *,
       CASE MinPrice WHEN Bandung THEN 'Bandung'
                     WHEN `Vendor Bandung` THEN 'Vendor Bandung'
                     WHEN Jakarta THEN 'Jakarta'
                     WHEN KJ THEN 'KJ'
                     ELSE 'unknown'
                     END AREA, 
       (SELECT trx.sumber_id FROM `transactions` AS trx WHERE cte.item_id = trx.item_id AND cte.MinPrice = trx.price) AS `sumber_id`
FROM 
(
SELECT item_id ,
       MAX(CASE WHEN vendor_id = 2 
                THEN price 
                END) AS Bandung, 
       MAX(CASE WHEN vendor_id = 3 
                THEN price 
                END) AS `Vendor Bandung`, 
       MAX(CASE WHEN vendor_id = 4 
                THEN price 
                END) AS Jakarta, 
       MAX(CASE WHEN vendor_id = 5 
                THEN price 
                END) AS KJ, 
       MIN(NULLIF(price, 0)) MinPrice
FROM 
    transactions  

 WHERE `start_periode` = '2020-02-17'
GROUP BY `item_id`, `start_periode`
) cte;

я получил ошибку: Запрос: SELECT *, CASE MinPrice WHEN Бандунг THEN 'Бандунг' WHEN Vendor Bandung THEN 'Vendor Bandung' WHEN Джакарта THEN 'Jakarta' WHEN ...

Код ошибки : 1242

Subquery returns more than 1 row

1 Ответ

0 голосов
/ 18 февраля 2020

Я бы просто написал этот запрос как:

SELECT
    t1.item_id,
    t1.sumber_id,
    COALESCE(t2.min_price, 0) AS min_price
FROM transactions t1
LEFT JOIN
FROM
(
    SELECT item_id, MIN(price) AS min_price
    FROM transactions
    WHERE start_periode = '2020-02-17' AND vendor_id IN (2,3,4,5)
    GROUP BY item_id
) t2
    ON t1.item_id = t2.item_id;
...