2017-02-24 98 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