2013-02-22 12 views
5

Ich habe eine gespeicherte Prozedur in sqlyog geschrieben. Es ist ziemlich lang und führt alle gewünschten Funktionen außer der concat Anweisung aus, so dass ich nur diese bestimmte Abfrage auflisten werde.Erhalten Sie ein zusätzliches Komma ',' während concat

Ich möchte grundsätzlich eine Trennung in den beiden Feldern und diese Anweisung wird in einem Cursor platziert, so dass es iterativ ist. co_auths ist im Moment null, so bekomme ich das Ergebnis als , 1,2,3 wo ich es will 1,2,3. Irgendwelche Vermutungen, was kann die am besten geeignete Lösung sein?

Antwort

6

Durch die Verwendung eines IF:

UPDATE recipes_new 
SET co_auths = IF(co_auths IS NULL, c1id, CONCAT(co_auths, ',', c1id)) 
WHERE id = name_in; 

Wenn der Wert von co_auths eine leere Zeichenfolge statt NULL ist:

UPDATE recipes_new 
SET co_auths = IF(LENGTH(co_auths), CONCAT(co_auths, ',', c1id), c1id) 
WHERE id = name_in; 
+0

sollte diese IF in der Update-Abfrage platziert werden? – Shahzaib

+0

UPDATE rezepts_neu SET co_auths = (IF (co_auths IST NULL, c1id, CONCAT (co_auths, ',', c1id)) WHERE id = name_in); Bin ich richtig, weil ich einen Fehler bekomme – Shahzaib

+0

Ich bekomme immer noch, 1,2,3 – Shahzaib

2

Dies sollte mit CASE überprüfen funktionieren, wenn es NULL ist:

CONCAT(
    CASE 
     WHEN IFNULL(co_auths,'') = '' 
     THEN '' 
     ELSE CONCAT(co_auths, ',') 
    END, c1id) 
+0

Das Problem bleibt dort – Shahzaib

+0

@Shahzaib suchen - Aktualisiert Antwort für leere und null zu überprüfen - viel Glück! – sgeddes

Verwandte Themen