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

注説明が通常TABLE1列に関連します。これらはuiのチェックボックスなので、uiのdesciption =チェックボックス名です。私の質問がある

table c(eid, groupid) 

、私は以下

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

私のクエリがあり、以下のような表3にTABLE1のデータを移行する必要があるが、私は期待通りの結果を得ていません。

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

Tim ..本当にうまくいきました。 – JOESHRA

関連する問題