MySQL CREATE FUNCTION-Ergebnis mit mehreren Datensätzen gibt Fehler #1172
Ich habe folgende 3 Tabellen:
Tabelle "Namen" --------------- id name --------------- 1 Buch 2 Stift Tabelle "Farbe" ------------------ die id-Farbe ------------------ 1 rot 2 yello 3 grün 4 rosa die Tabelle "beides" ------------------------ id-name-Farbe ---------------------- 1 1 1 2 1 2 3 1 3 4 2 2
und ich haben die folgende Funktion:
DELIMITER //
CREATE FUNCTION get_word(n VARCHAR(20))
RETURNS VARCHAR(10)
READS SQL DATA
DETERMINISTIC
BEGIN
DECLARE b VARCHAR(20);
SELECT `color`.`color` INTO b FROM `name`
LEFT JOIN `both`
ON `name`.`id`=`both`.`name`
LEFT JOIN `color`
ON `color`.`id`=`both`.`color`
WHERE `name`.`name`=n;
RETURN b;
END//
DELIMITER ;
wenn ich jetzt laufen
WÄHLEN Sie get_word('Stift')
es gibt gelb was erwarten.
aber wenn ich den code ausführen
WÄHLEN Sie get_word('Buch')
Sie erhalten den Fehler: #1172 - Ergebnis Bestand aus mehr als einer Zeile
meine Frage:
Was zu tun ist, damit diese Funktion arbeitet mit mehreren records sowie single-Platte, die es macht, wenn ich Suche nach "pen"?
Dank
UPDATE:
Wenn Sie die Abfrage ohne die Funktion wie folgt, es funktioniert einfach gut:
SELECT `color`.`color` AS b FROM `name`
LEFT JOIN `both`
ON `name`.`id`=`both`.`name`
LEFT JOIN `color`
ON `color`.`id`=`both`.`color`
WHERE `name`.`name`='book';
und es gibt:
**b** rot gelb grün
- was ist Ihre gewünschte Ergebnis, wenn Sie mehrere Datensätze ? 'Buch' hat rote, gelbe und grüne als Ergebnisse. So was muss zurückgegeben werden ?
- Ich möchte, um alle die Farbe
- Ja, aber wie ? Eine "Liste", eine verkettete Zeichenfolge ?
- Ich sollte eine Spalte mit mehreren Datensätzen.
- Ich aktualisierte die Frage an der Unterseite.
- hat es etwas mit den RETURNS VARCHAR(10)? können ändern wir den Rückgabetyp zu sein, mehrere Zeilen?
- Gut, in der Tat nicht, Sie können nicht dies in eine Funktion. Siehe meine Antwort für details.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, es scheint, dass Sie wollen ein resultset (mehr als einen Wert)
Aber eine mysql gespeicherte Funktion kann nicht zurückkehren, ein resultset (siehe doc : Einschränkungen für Gespeicherte Funktionen).
Lösung 1 : verwenden Sie eine gespeicherte Prozedur
Solution2 : Rückkehr eine verkettete Zeichenfolge
etwas wie
"green, yellow, blue"
GROUP_CONCAT kann das leicht tun.
sehen Sie diese stackoverflow-Frage zum Beispiel
Versuchen, verwenden Sie group by nach
where
zum Beispiel versuchen, hinzufügengroup by id
oder etwas, was einzigartig ist in Ihrer Tabelle.