2016-03-21 2 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»

Я хочу заменить «REASON::» с «Reason:» и а также заменить «UNSUB_SURVEY_FREQUENT» с по строке и т.д., мне нужно сделать около 4-5 строк замен все на «b.data»

Я попытался следующие:

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 (она сортируется, доступна для поиска и т. Д.). К сожалению, я могу использовать только один запрос, и я не могу вызывать дальнейшие процедуры для форматирования результата запроса. Первая строка результата может быть задана как заголовок и, следовательно, оператор union all в начале моего запроса. Поскольку я хочу, чтобы таблица была легко читаемой, я хочу заменить (перевести) строки на «b.data». Например. вместо «REASON :: 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, который был показан здесь. Вы можете показать сообщение об ошибке? –

ответ

0

Вы должны сделать запрос UPDATE изменить свои данные, и вы не нуждаетесь в UNION на заголовки столбцов для этого обновления

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 

Это является стандартом ANSI, так как вы не указали РСУБД

+0

Извините, если я не был ясен: мне не нужны данные в таблицах - это более того, что у меня есть очень удобный инструмент, который отображает результат одного запроса sql в красивую сортируемую таблицу для используемых мной cms. Вот почему я добавляю заголовки в первом столбце с «union» all и почему я хочу заменить некоторые строки. –

Смежные вопросы