2016-03-21 1 views
0

に参加:SQLは左で選択して交換してください、私は正常に動作し、次のクエリを持って

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 

今、私が直接b.dataにいくつかの文字列の置換をしたい...それは、文字列を読み取るために、むしろ醜いが含まれています例えば - 「REASON::UNSUB_SURVEY_FREQUENT REASON::UNSUB_SURVEY_IRRELEVANT REASON::Some text from textfield

私は私がすべての「b.data」に周り4-5文字列の置換を行う必要がある「Reason:」で「REASON::」を置換し、同様になど応じて文字列を使用して「UNSUB_SURVEY_FREQUENT」を交換したい

私は次のことを試してみました:

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 

しかし、それは動作しません。残念なことに、私はこれを単一のクエリで実行しなければならず、置換を含む必要があります。 replaceコマンドを適切にラップする方法に関するヒントは素晴らしいでしょう。

更新:これまでの入力をありがとうございます。 これはMySQLデータベースであり、実際にデータベース自体の文字列を置き換えたり、新しいテーブルを作成したりしたくないのですが、クエリの結果この背後にある理由:私が使用するCMSのための非常に便利なツールがあります。このツールを使用すると、mysqlクエリの結果をきれいに整形されたhtmlテーブル(ソート可能、検索可能なものなど)にレンダリングできます。 残念ながら、私は1つのクエリしか使用できません。クエリ結果をフォーマットするための手続きを呼び出すことはできません。結果の最初の行は、タイトルとして、したがって、クエリの最初に 'union all'ステートメントとして設定することができます。テーブルを読みやすくするために、 'b.data'の文字列を置き換える(変換する)必要があります。例えば。 「理由:: UNSUB_SURVEY_IRRELEVANT」の代わりに「理由:ニュースレターの内容が私にもう気にしない」...理由:: UNSUB_SURVEY_FREQUENTはそれに応じて翻訳されるべきである...

私は望んでいたたとえSQLクエリーがむしろ複雑になっても、私のcmsのための適切なモジュールを書くことができます。

エラーメッセージ:

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). 

(SQLクエリの形式の変更のためにありがとうございました - より良い今読むために)。

+0

何がうまくいかないのですか? –

+0

どのようなRDBSですか? Microsoft SQL Server、Postgres、Oracle ....? –

+0

あなたは言っています_ "私は4~5文字列の置換えをすべて 'b.data'" _にする必要がありますが、ここに示したREPLACE文は1つだけです。あなたはメッセージのエラーを表示できますか? –

答えて

0

はあなたのデータを変更する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 

あなたはRDBMS

に指定されていなかったので、これはANSI標準であるため、列のタイトルに UNIONは必要ありません
+0

申し訳ありませんが、私は明確ではない場合:私はテーブルのデータが必要ない - 私は使用するCMSのための素敵なソート可能なテーブルに単一のSQLクエリの結果をレンダリングする非常に便利なツールがあります。だからこそ、私は最初の列に 'union'という文字列を追加して、なぜいくつかの文字列を置き換えたいのです。 –

関連する問題