2014-02-17 2 views
0

MySQL에서 다음 의사 코드를 생성하려고합니다. 나는 다음과 같은 테이블이 있습니다특정 조건을 충족하는 경우에만 다른 테이블의 테이블 값에 삽입하십시오.

  • 스페셜
  • product_filter을

product_filter 테이블에만 두 개의 열, product_idfilter_id

나는 SQL을 마련하고 싶습니다를 가지 :

  1. 에서 모든 product_ids를 읽습니다. 9,테이블과은 가격이 $ 100 미만인 경우 너무
  2. 는, 필터 ID가 될 것 specials 테이블에서 제품 ID를 읽을 때
  3. , 그것은이 price 열을 볼 필요가 product_filter 테이블을두고 1
  4. 가격 $ 100와 $에서 500 인 경우 가격이 $ 500 $ 내지 1000 인 경우, 필터 ID가 2
  5. 것, 필터 ID는 3 다음

내가 지금까지 무엇을 가지고 다음과 같습니다

INSERT INTO product_filter (product_id,filter_id) 
SELECT product_id, 
FROM specials; 

도움을 주시면 감사하겠습니다.

답변

1

filter_id (이 0이 그 경계에서 가격이없는 것을 설정합니다)이 무엇인지를 결정하기 위해 CASE를 사용하여,이 시도 :

INSERT INTO product_filter (product_id,filter_id) 
SELECT product_id, 
    (CASE WHEN price < 100 then 1 
    WHEN price >= 100 AND price < 500 then 2 
    WHEN price >= 500 AND price < 1000 then 3 
    ELSE 0 END) AS filter_id 
FROM specials; 

다음은 작동하는 SQLFiddle입니다.

+0

감사 : 아래 그림과 같이

또한 절 범위 값 사이에 약간의 변화가 필요합니다. 아직 테스트하지는 않았지만 가격이 정확히 100 달러라면 어떻게 될까요? 대신에 두 번째 WHEN 가격을 =>로 변경해야합니까? – farjam

+0

@farjam 예, 정확하게 100이고 정확히 500 인 것을 2와 3으로 바꾸고 싶다면'> ='로 변경하십시오. – hichris123

0

이 쿼리를 시도하십시오 (1000보다 큰 값을 지정하지 않았으므로 값이 1000보다 큰 경우 filter_id 4가됩니다). 이 같은

INSERT INTO product_filter (product_id,filter_id) 
SELECT product_id, 
     CASE WHEN price < 100 THEN 1 
      WHEN price BETWEEN 100 AND 500 THEN 2 
      WHEN price BETWEEN 500 AND 1000 THEN 3 
      ELSE 4 
     END as filter_id 
FROM specials; 
0

사용 무언가 :

INSERT INTO product_filter (product_id,filter_id) 
SELECT 
    product_id, 
    (CASE 
     WHEN price < 100 THEN 1 
     WHEN price BETWEEN 100 AND 500 THEN 2 
     WHEN price BETWEEN 500 AND 1000 THEN 3 
    END) as filter_id 
FROM specials; 
0

이 시도 : 응답에 대한

INSERT INTO product_filter (product_id,filter_id) 
SELECT product_id, 
     case when price < 100 then 1 -- price under $100, the filter id be 1 
      -- price between $100 and $500, the filter id be 2 
      when price between 101 and 500 then 2 
      -- price between $500 and $1000, the filter id be 3 
      when price between 501 and 1000 then 3 
      -- else ? -- fill this as you need 
FROM specials; 
관련 문제