2017-03-20 26 views
0

插入另一個表中的子字符串我嘗試將另一個表中的值拆分爲另一個表中的條件中的幾個列。 作爲一個例子我有2個表:MySql從CASE

rawdataTbl

ID INT

一個varchar

detailedTbl

ID INT

b VARCHAR

ÇVARCHAR

d VARCHAR

我試過如下:

INSERT INTO detailedTbl 
SELECT 
CASE 
WHEN a LIKE "%someText%" 
    "Something", 
    substr(a, 1, 5), 
    substr(a, 6, 8) 
WHEN a LIKE "%someText2%" 
    "Something else", 
    substr(a, 4, 5), 
    substr(a, 7, 9) 
END 
FROM rawdataTbl; 

回答

2

嘗試:

INSERT INTO detailedTbl 
(b,c,d) 
SELECT 
CASE 
    WHEN a LIKE "%someText%" THEN "Something" 
    WHEN a LIKE "%someText2%" THEN "Something else" 
END, 
CASE 
    WHEN a LIKE "%someText%" THEN substr(a, 1, 5) 
    WHEN a LIKE "%someText2%" THEN substr(a, 6, 8) 
END, 
CASE 
    WHEN a LIKE "%someText%" THEN substr(a, 4, 5) 
    WHEN a LIKE "%someText2%" THEN substr(a, 7, 9) 
END 
FROM rawdataTbl; 
+0

謝謝,工作得很好! – imuch11

1

大概是最靈活的使用UNION與幾個查詢每個都有自己的WHERE子句: -

INSERT INTO detailedTbl 
SELECT "Something", 
     substr(a, 1, 5), 
     substr(a, 6, 8) 

FROM rawdataTbl 
WHERE a LIKE "%someText%" 
UNION 
SELECT "Something else", 
     substr(a, 4, 5), 
     substr(a, 7, 9) 
FROM rawdataTbl 
WHERE a LIKE "%someText2%"; 

這不是直接可比較的,因爲如果檢查的值與ag匹配,它可以插入2行使用LIKE子句中的2個。如果這導致了問題,那麼你需要在你的原始查詢返回單獨的列: -

INSERT INTO detailedTbl 
SELECT 
CASE 
    WHEN a LIKE "%someText%" 
     "Something", 
    WHEN a LIKE "%someText2%" 
     "Something else", 
END, 
CASE 
    WHEN a LIKE "%someText%" 
     substr(a, 1, 5), 
    WHEN a LIKE "%someText2%" 
     substr(a, 4, 5), 
END, 
CASE 
    WHEN a LIKE "%someText%" 
     substr(a, 6, 8) 
    WHEN a LIKE "%someText2%" 
     substr(a, 7, 9) 
END 
FROM rawdataTbl; 
+0

感謝您的快速答覆!第二個工作,我只需在每個時間後添加「THEN」... – imuch11