2016-03-21 9 views
0

Ich habe die folgende Abfrage, die gut funktioniert:SQL in ausgewählten Ersetzen mit LEFT JOIN

SELECT 'User ID' AS 'uid', 
     'E-Mail' AS 'email', 
     'Reason' AS 'reason' 
UNION ALL 
SELECT a.subid AS 'uid', 
     a.email AS 'email', 
     b.data AS 'reason' 
FROM sms7l_subscriber a 
LEFT JOIN sms7l_history b ON a.subid = b.subid 
WHERE (a.confirmed = 0 
     OR a.enabled = 0 
     OR a.accept = 0) 
    AND b.action = unsubscribed 

Jetzt möchte ich direkt ein paar String-Ersatz auf b.data zu tun ... es ist ein ziemlich hässlich enthält Zeichenfolge zu lesen z.B - ‚REASON::UNSUB_SURVEY_FREQUENT REASON::UNSUB_SURVEY_IRRELEVANT REASON::Some text from textfield

Ich will ‚REASON::‘ ersetzen, die mit ‚Reason:‘ und auch ersetzen ‚UNSUB_SURVEY_FREQUENT‘ mit der entsprechenden Zeichenfolge usw. Ich brauche

um 4-5 Zeichenfolge Ersetzungen alle auf ‚b.data‘ zu machen

ich habe versucht, die folgenden:

SELECT 'User ID' AS 'uid', 
     'E-Mail' AS 'email', 
     'Reason' AS 'reason' 
UNION ALL 
SELECT a.subid AS 'uid' , a.email AS 'email', 
REPLACE (b.data, 
     'REASON::', 
     'Reason: ') AS 'reason' 
FROM sms7l_subscriber a 
LEFT JOIN sms7l_history b ON a.subid = b.subid 
WHERE (a.confirmed = 0 
     OR a.enabled = 0 
     OR a.accept = 0) 
    AND b.action = unsubscribed 

Aber es funktioniert nicht. Leider muss ich dies in einer einzigen Abfrage tun und es muss die Ersetzungen enthalten. Irgendwelche Hinweise, wie man den Ersetzungsbefehl richtig umschließt, wären großartig.

Update: Vielen Dank für die Eingabe bisher. Hier sind einige zusätzliche Informationen, die ich nicht erwähnen wollte, die einige Verwirrung verursacht haben könnten: Es ist eine MySQL-Datenbank und ich möchte nicht die Strings in der Datenbank selbst ersetzen oder eine neue Tabelle erstellen - ich möchte nur die Strings ersetzen das Abfrageergebnis Der Grund dafür: Es gibt ein sehr praktisches Werkzeug für das cms, das ich benutze, das es mir erlaubt, das Ergebnis einer MySQL-Abfrage in eine schön formatierte HTML-Tabelle zu bringen (es ist sortierbar, durchsuchbar usw.). Leider kann ich nur eine einzige Abfrage verwenden und ich kann keine weiteren Prozeduren aufrufen, um das Abfrageergebnis zu formatieren. Die erste Zeile des Ergebnisses kann als Titel und damit die "union all" -Anweisung am Anfang meiner Abfrage gesetzt werden. Da ich möchte, dass die Tabelle leicht zu lesen ist, möchte ich die Strings auf 'b.data' ersetzen (übersetzen). Z.B. anstelle von 'REASON :: UNSUB_SURVEY_IRRELEVANT' möchte ich 'Grund haben: Der Inhalt des Newsletters interessiert mich nicht mehr' ... 'REASON :: UNSUB_SURVEY_FREQUENT' sollte dementsprechend übersetzt werden ...

Ich hatte gehofft dass, selbst wenn die SQL-Abfrage am Ende ziemlich gewunden wird, würde es mich retten, ein richtiges Modul für mein cms zu schreiben.

Die Fehlermeldung:

1064 You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near... (and than comes the query string). 

(Danke für die Formatänderungen auf der SQL-Abfrage - jetzt viel besser zu lesen).

+0

Was funktioniert nicht? –

+0

was RDBS? Microsoft SQL Server, Postgres, Oracle ....? –

+0

Sie sagten _ "Ich muss rund 4-5 Zeichenersetzung alle auf 'b.data'" _ machen, aber es gibt nur eine REPLACE-Anweisung, die hier gezeigt wurde. Können Sie den Nachrichtenfehler anzeigen? –

Antwort

0

Sie haben eine UPDATE Abfrage zu tun, um Ihre Daten zu ändern, und Sie brauchen nicht die UNION auf den Spaltentitel für dieses Update

UPDATE sms7l_subscriber a 
    LEFT JOIN sms7l_history b ON a.subid = b.subid 
    SET b.data = REPLACE (b.data, 'REASON::','Reason: ') 
    WHERE (a.confirmed = 0 or a.enabled = 0 or a.accept = 0) and b.action = unsubscribed 

Dies ist Standard ANSI, da Sie nicht die RDBMS

angegeben haben
+0

Entschuldigung, wenn ich nicht klar war: Ich brauche die Daten in den Tabellen nicht - es ist mehr, dass ich ein sehr convinient Werkzeug habe, das das Ergebnis einer einzelnen SQL-Abfrage in eine nette sortierbare Tabelle für die cms rendere. Deshalb füge ich die Titel in der ersten Spalte mit der 'union' all hinzu und warum möchte ich die paar Strings ersetzen. –