2017-11-29 3 views
0

Ich habe eine Zeichenfolge wie folgt resultierende:Mit Mysql GROUP_CONCAT JOIN in Query

'41,42,43,44,45,46,' 

aus dieser Abfrage:

SELECT 
    GROUP_CONCAT(lv 
     SEPARATOR ',') as Id 
FROM 
    (SELECT 
     @pv:=(SELECT 
        GROUP_CONCAT(Id 
          SEPARATOR ',') 
       FROM 
        iot_zone 
       WHERE 
        FIND_IN_SET(id_zone, @pv)) AS lv 
    FROM 
     iot_zone 
    JOIN (SELECT @pv:=40) tmp) a; 

Ich brauche dieses Ergebnis zu einer Abfrage wie beizutreten:

SELECT T.* FROM T, T2 
WHERE T.Id = T2.Id 

wobei T2 eine Tabelle mit dem Ergebnis von GROUP_CONCAT

012 ist
41 
42 
43 
44 
45 
46 

Können Sie mir helfen?

Vielen Dank

+1

Vielleicht bin ich etwas fehlt, aber anstatt mit 'GROUP_CONCAT' eine Liste von Werten zu aggregieren in eine Zeichenkette, warum lassen Sie die Werte nicht als denormalisierte Zeilen, in denen Sie ihnen leicht beitreten können? – StuartLC

Antwort

0

Versuchen Sie, die folgende

CREATE TABLE T2(Id int); 
INSERT T2(Id)VALUES(41),(42),(43); 

SELECT * 
FROM 
    (
    SELECT '41,42,43,44,45,46,' Id 
) T 
JOIN T2 on CONCAT(',',T.Id) LIKE CONCAT('%,',T2.Id,',%') 

Ich hoffe, dass ich Ihre Frage richtig verstanden.

fand ich eine andere Variante mit FIND_IN_SET-SELECT WHERE IN with GROUP_CONCAT as input

ich denke, es mehr

nützlich sein werden
SELECT * 
FROM 
    (
    SELECT '41,42,43,44,45,46,' IdList 
) T 
JOIN T2 ON FIND_IN_SET(T2.Id,T.IdList) 
+0

Perfekt. Vielen Dank – Bob

+0

Ich habe mit 'FIND_IN_SET' eine weitere sehr gute Variante für MySQL gefunden. Ich habe es auch in meine Antwort aufgenommen. – Leran2002