2015-06-26 2 views
0

после некоторой борьбы. У меня наконец есть рабочий код для запроса базы данных и получения результатов, которые я хочу.Обновление Mysql в сочетании с внутренним соединением и не excist

SELECT * 
FROM email_list_subscriber_events AS t1 INNER JOIN email_list_subscribers ON email_list_subscribers.subscriberid=t1.subscriberid 
WHERE lastupdate BETWEEN 0 AND 9999999999 
     AND t1.listid = 206 
     AND eventtype = 'Sent an Email Campaign' 
     AND NOT EXISTS (SELECT 1 
         FROM email_list_subscriber_events AS t2 
         WHERE t1.subscriberid = t2.subscriberid 
          AND t2.lastupdate BETWEEN 0 AND 9999999999 
          AND t2.eventtype IN ('Opened an Email Campaign', 'Clicked on a link')) 
GROUP BY `email_list_subscribers`.`subscriberid` 

Сейчас я нахожусь в новой борьбе, чтобы обновить email_list_subscribers.confirmed от 0 до 1 или от 1 до 0.

Я попробовал несколько UPDATE структур, но ни один из них не будет разбирать.

Спасибо за ваше время и внимание.

Обновление:

Мои безжалостно неудачные попытки

UPDATE epaper_list_subscribers 
SET confirmed = 1 
FROM email_list_subscriber_events AS t1 INNER JOIN email_list_subscribers ON email_list_subscribers.subscriberid=t1.subscriberid 
WHERE lastupdate BETWEEN 0 AND 9999999999 
     AND t1.listid = 206 
     AND eventtype = 'Sent an Email Campaign' 
     AND NOT EXISTS (SELECT 1 
         FROM email_list_subscriber_events AS t2 
         WHERE t1.subscriberid = t2.subscriberid 
          AND t2.lastupdate BETWEEN 0 AND 9999999999 
          AND t2.eventtype IN ('Opened an Email Campaign', 'Clicked on a link')) 

И

SELECT * 
FROM email_list_subscriber_events AS t1 INNER JOIN email_list_subscribers ON email_list_subscribers.subscriberid=t1.subscriberid 
WHERE lastupdate BETWEEN 0 AND 9999999999 
     AND t1.listid = 206 
     AND eventtype = 'Sent an Email Campaign' 
     AND NOT EXISTS (UPDATE email_list_subscribers 
         SET email_list_subscribers.confirmed = 1 
         FROM email_list_subscriber_events AS t2 
         WHERE t1.subscriberid = t2.subscriberid 
          AND t2.lastupdate BETWEEN 0 AND 9999999999 
          AND t2.eventtype IN ('Opened an Email Campaign', 'Clicked on a link')) 

Поскольку FROM не представляется возможным в UPDATE, является то, может быть, можно вывести результаты запроса на выборку в TEMP TABLE и сделать обновление?

SQLFIDDLE: http://sqlfiddle.com/#!9/0ee99

+1

Где ваше заявление об обновлении? Мы не можем исправить то, что мы не можем видеть. –

+0

Извините, это пятница ... – Naithan

+0

В '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '. –

ответ

0

P.S: Я не проверял этот код. Также убедитесь, что столбцы связаны с соответствующими таблицами.

UPDATE epaper_list_subscribers 
SET confirmed = 1 
WHERE email_list_subscribers.subscriberid=epaper_list_subscribers.subscriberid 
     AND email_list_subscribers.lastupdate BETWEEN 0 AND 9999999999 
     AND email_list_subscriber_events.listid = 206 
     AND email_list_subscribers.eventtype = 'Sent an Email Campaign' 
     AND NOT EXISTS (SELECT 1 
         FROM email_list_subscriber_events AS t2 
         WHERE t1.subscriberid = t2.subscriberid 
          AND t2.lastupdate BETWEEN 0 AND 9999999999 
          AND t2.eventtype IN ('Opened an Email Campaign', 'Clicked on a link')) 
+0

Невозможно получить эту работу. WHERE email_list_subscribers. subscriber = t1.subscriberid Я уже слишком странно, так как t1 еще не объявлен, но спасибо за попытку! – Naithan

+0

О да. Замените 't1' на' epaper_list_subscribers'. Я забыл это обновить. –

+0

Хм, я получаю следующее ошибка: "# 1054 - Неизвестная колора mn 'epaper_list_subscriber_events.lastupdate' в 'where clause' "(Кстати, я заменил все слова« email »на« epaper ». (мой живой сервер и локальный используют другой предлог таблицы) – Naithan