2013-08-31 4 views
0

Это был мой предыдущий question. Я не могу решить проблему. Я обновляю свой код и косвенно использую GROUP BY. но та же проблема показывает. Возвращает дублирующиеся значения подзапроса. На самом деле я сделал TRIGGER, поэтому я думаю, что если показать триггер, будет ясно пониматьОшибка # 1242 Подзапрос возвращает более 1 строки при обновлении

-- 
-- Triggers `product_purchases` 
-- 
DROP TRIGGER IF EXISTS `change_stock_when_purchases`; 
DELIMITER // 
CREATE TRIGGER `change_stock_when_purchases` AFTER INSERT ON `product_purchases` 
FOR EACH ROW BEGIN 
    DECLARE X INTEGER; 
    SET X = (SELECT product_size FROM product_stock WHERE product_id = NEW.product_id); 
    IF NEW.product_size =X THEN 
    UPDATE 
     product_stock as S1 
     INNER JOIN 
     (
     SELECT 
      S.product_stock_id,I.quantity 
     FROM 
      product_stock AS S 
     INNER JOIN 
      product_purchase_item AS I 
     ON 
      S.product_id=I.product_id AND S.product_size=I.product_size 
     INNER JOIN 
      product_purchases AS P 
     ON 
      I.product_purchase_item_id=P.product_purchase_item_id 
     WHERE 
      P.product_purchase_id=NEW.product_purchase_id 
     GROUP BY 
      S.product_stock_id 
     ) 
     AS M 
    ON 
     S1.product_stock_id=M.product_stock_id 
    SET 
     S1.product_size_quantity=S1.product_size_quantity+M.quantity; 
    ELSE 
    INSERT INTO 
     product_stock (product_id,product_size,product_size_quantity) 
     SELECT 
      product_id,product_size, quantity 
     FROM 
      product_purchase_item 
     WHERE 
      product_purchase_item_id=NEW.product_purchase_item_id; 
    END IF; 
END 
// 
DELIMITER ; 

Проблема шоу, когда это обновление же product_id «s отличается product_size на product_stock

+0

Некоторые примеры данных поможет. Один вопрос - на вашем внутреннем соединении, где предложение должно содержать product_too? например, P.product_purchase_id = NEW.product_purchase_id И s.product_id = NEW.product_id. Надеюсь, что это помогает –

+0

@AndaIancu Я также добавить \t S.product_id = NEW.product_id \t \t \t И \t \t \t S.product_size = NEW.product_size но та же проблема – Imran

+0

Рассмотрим предоставить таблицы схемы и примеры данных. Это может значительно улучшить ваши шансы получить ответ, который вы ищете. – peterm

ответ

2

Самый подозрительный подзапроса в коде это одна:

SET X = (SELECT product_size FROM product_stock WHERE product_id = NEW.product_id); 

у вас есть дубликаты в product_stock таблице? Это легко определить:

select product_id 
from product_stock 
group by product_id 
having count(*) > 1; 

Если вы делаете, вы можете выбрать один из них, как:

SET X = (SELECT product_size FROM product_stock WHERE product_id = NEW.product_id limit 1); 
+0

благодаря этой работе сейчас. Я изменяю свой X-запрос SET X = (SELECT product_size FROM product_stock WHERE product_id = NEW.product_id AND product_size = NEW.product_size); – Imran

+0

ты герой. благодаря – Imran

Смежные вопросы