1 Pluspunkt 0 Minuspunkte

Ich versuche eine Liste von Usern in der Variable myvar zu speichern und dann mit einem IN() Statement nach den selben Usern zu suchen.

SET @myvar = (select User FROM mysql.user);
SELECT * FROM mysql.User WHERE User IN(@myvar);

Dabei bekomme ich folgenden Fehler angezeigt.

Unterabfrage lieferte mehr als einen Datensatz zurück

Wie kann ich eine Abfrage mit mehreren Ergebnissen in einer Variable speichern?

von  

2 Antworten

1 Pluspunkt 0 Minuspunkte

Die Werte der ersten Abfrage kannst du als kommaseparierte Zeichenfolge speichern und in einer zweiten Abfrage mit einem FIND_IN_SET danach suchen.

SET @myvar = (SELECT GROUP_CONCAT(User) FROM mysql.user);
SELECT * FROM mysql.User WHERE FIND_IN_SET(User, @myvar);
von  
1 Pluspunkt 0 Minuspunkte

Du kannst eine temporäre Tabelle für das Zwischenergebnis anlegen.

CREATE TEMPORARY TABLE temp_table (value VARCHAR(30));

-- Einfügen von Werten in die temporäre Tabelle
INSERT INTO temp_table (value) SELECT User FROM mysql.user;

SELECT * FROM mysql.user WHERE User IN (SELECT value FROM temp_table);

DROP TEMPORARY TABLE temp_table;
von (716 Punkte)