2014-02-17 19 views
0

我試圖在MySQL中創建以下僞代碼。我有以下表格:僅當它們符合某些條件時才從另一個表插入表值

  • 特價
  • product_filter

product_filter表只有兩列,product_idfilter_id

我想拿出一個SQL是:

  1. 從中讀取所有的product_id表,並把它們放入product_filter
  2. 當從specials表中讀取的產品ID,就需要看price柱太
  3. 如果價格在$ 100,過濾器ID是1
  4. 如果價格爲$ 100和$ 500之間,過濾器ID將是2
  5. 如果價格爲$ 500和$ 1000,過濾器ID是3

這是我到目前爲止有:

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

任何幫助表示讚賞。

回答

1

試試這個,使用CASE確定filter_id是什麼(這將設置任何不具有等於0的邊界的價格) :

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美元,會發生什麼?我應該改變第二個價格> =代替嗎? – 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; 
相關問題