2013-05-27 4 views
2

SELECT를 통해 여러 열을 업데이트하는 여러 가지 방법을 찾아 보았지만 여전히 작동하지 못했습니다. 이것은 내가 뭘하려 :MYSQL에서 한 번에 여러 열을 업데이트하는 방법은 무엇입니까?

delimiter @@ 
CREATE TRIGGER trigger_sales 
AFTER INSERT ON orders 
FOR EACH ROW 
BEGIN 
UPDATE sales 
SET (userid, productid, transaction, price, quarter) = 
SELECT userid, productid, COUNT(productid) AS transaction, SUM(total_P) AS price, 
     case when (month(date)) >=3 and (month(date)) <=5 then 'Spring' 
      when (month(date)) >=6 and (month(date)) <=8 then 'Summer' 
      when (month(date)) >=9 and (month(date)) <=11 then 'Fall' 
      else 'Winter' 
      end AS quarter 
FROM orders  
GROUP BY userid, productid, quarter 
[email protected]@ 
delimiter; 

감사합니다!

+0

당신에게'UPDATE' 또는'INSERT' 새 값을 하시겠습니까? 주문과 판매 테이블간에 관계가 있습니까? – GregD

+0

업데이트하고 싶습니다. 예, 판매 테이블은 동일 사용자가 다른 분기에 배치 한 특정 제품의 주문 수를 계산합니다. –

+0

이 테이블 간의 관계가 있습니까? – GregD

답변

4

필자가 선호하는 방법은 INSERT 쿼리를 사용하여 각 삽입에 이미 사용 된 기본 키가 있는지 확인하는 것입니다. 그런 다음 ON DUPLICATE KEY UPDATE을 추가하고 `column`=VALUES(`column`) 양식의 모든 입력란을 살펴 보니 좋습니다. 이것은 대개 외래 키가있는 위치에서 가장 잘 작동합니다.

+0

당신이 말한 것에 대해 자세히 설명해 주시겠습니까? 내 판매 테이블에는 2 개의 외래 키 userid 및 productid가 있습니다. userid, productid 및 quarter of order가 아직 sales에없는 경우 sales에 새 행을 삽입하려고합니다. 이미 존재하는 경우 트랜잭션을 트랜잭션 + 1로 업데이트하고 총 가격을 업데이트하려고합니다. –

3

샘플 데이터없이 쿼리를 테스트했지만이 해결 방법으로 올바른 방향으로 사용자를 설정할 수 있습니다.

CREATE VIEW orders_view AS 
    SELECT userid, 
      productid, 
      COUNT(productid) AS 'transaction', 
      SUM(total_P) AS price, 
      CASE 
     WHEN (MONTH(o.date)) >=3 AND (MONTH(o.date)) <=5 THEN 'Spring' 
     WHEN (MONTH(o.date)) >=6 AND (MONTH(o.date)) <=8 THEN 'Summer' 
     WHEN (MONTH(o.date)) >=9 AND (MONTH(o.date)) <=11 THEN 'Fall' 
       ELSE 'Winter' 
      END AS quarter  
     FROM orders  
    GROUP BY userid, productid, quarter; 

    UPDATE sales s, orders_view o 
     SET s.userid = o.userid, 
      s.productid = o.productid, 
      s.`transaction` = o.`transaction`, 
      s.price = o.price, 
      s.quarter = o.quarter 
     WHERE s.userid = o.userid; 

내가 실제 데이터로 테스트하지 않았 음을 유의하시기 바랍니다 : 여러 테이블에 UPDATE를 사용하는 동안 나는 GROUP BY 제한을 극복하기 위해 VIEW을 사용했다.

더 많은 정보 :

관련 문제