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.

InformationsquelleAutor barnamah | 2013-08-28
Schreibe einen Kommentar