2017-02-24 45 views
1

有3個表如下,如何爲MySQL調試複雜的嵌套SQL語句?

table a (eid, COLUMNA, COLUMNB, COLUMNC, COLUMND) 

1001,1,1,0,1 
1002,1,0,0,0 




table b (id, description) 
1, ABC 
2, BCD 
3,CDE 
4,DEF 

注:下面將描述涉及到表1的列,通常;這些是ui上的複選框,所以descripttion =來自ui的複選框名稱。

table c(eid, groupid) 

我的問題是,我需要將數據從表1遷移到3號表如下

1001,1 
1001,2 
1001,4 
1002,1 

下面是我的查詢,但如我所料沒有得到結果。

SELECT DISTINCT eid, id 
    FROM (SELECT eid, 
       CASE 
        WHEN cola = 1 
        THEN 
         (SELECT id 
          FROM tableb 
         WHERE description = 'ABC') 
        WHEN cola = 0 
        THEN 
         -1 
       END 
        AS coln_a, 
       CASE 
        WHEN colb = 1 
        THEN 
         (SELECT id 
          FROM tableb 
         WHERE description = 'BCD') 
        WHEN colb = 0 
        THEN 
         -1 
       END 
        AS coln_b, 
       CASE 
        WHEN colc = 1 
        THEN 
         (SELECT id 
          FROM tableb 
         WHERE description = 'CDE') 
        WHEN colc = 0 
        THEN 
         -1 
       END 
        AS coln_c, 
       CASE 
        WHEN cold = 1 
        THEN 
         (SELECT id 
          FROM tableb 
         WHERE description = 'DEF') 
        WHEN cold = 0 
        THEN 
         -1 
       END 
        AS coln_d 
      FROM tablea 
      WHERE cola = 1 OR colb = 1 OR colc = 1 OR cold= 1) temp_t, 
     tableb 
    WHERE coln_a = id OR coln_b = id OR coln_c = id OR coln_d = id 
ORDER BY eid, id; 

是什麼錯誤?

+1

你能更好地解釋你的邏輯嗎? –

回答

0

您可通過執行一系列工會做到這一點:

(SELECT eid, 1 AS groupid FROM tablea WHERE COLUMNA = 1) 
UNION ALL 
(SELECT eid, 2 FROM tablea WHERE COLUMNB = 1) 
UNION ALL 
(SELECT eid, 3 FROM tablea WHERE COLUMNC = 1) 
UNION ALL 
(SELECT eid, 4 FROM tablea WHERE COLUMND = 1) 

我沒有看到在B表是如何關係到你想要的即時輸出。

+0

添..謝謝你的答案..它真的工作.. !! – JOESHRA