Mysql UPDATE表取决于其他表中的NOT EXIST

时间:2015-07-01 13:03:51

标签: mysql

我之前试图找到答案,但也许我是以一种太难的方式问它,因此重写。

我有两张桌子。我需要在value_table中搜索一个值,如果找到这个值,它必须搜索是否存在某些其他值。然后它必须从另一个表中返回一个设置。

使用以下命令完成:

SELECT * 
FROM value_table AS t1 INNER JOIN settings_table ON settings_table.id=t1.id
WHERE certainvalue BETWEEN 0 AND 9999999999 
      AND anothervalue = 'some text'
      AND NOT EXISTS (SELECT 1
                      FROM value_table AS t2
                      WHERE t1.id = t2.id 
                            AND t2.certainvalue BETWEEN 0 AND 9999999999 
                            AND t2.anothervalue IN ('different text', 'some other different text'))

像魅力一样工作。 但是现在我想SET设置表中的值取决于相同的设置。但是我无法做到这一点。这是我猜的更好的尝试之一。

UPDATE settings_table
    SET setting = 1
    WHERE settings_table.id=values_table.id 
          AND values_table.lastupdate BETWEEN 0 AND 9999999999 
          AND values_table.listid = 206
          AND settings_table.eventtype = 'Sent an Email Campaign'
          AND NOT EXISTS (SELECT 1
                          FROM values_table AS t2
                          WHERE settings_table.id = t2.id 
                                AND t2.certainvalue BETWEEN 0 AND 9999999999 
                                AND t2.anothervalue IN ('different text', 'some other different text'))

我创建了一个sqlfiddle以显示更多我的意思。更新声明: http://sqlfiddle.com/#!9/0ee99/3select声明: http://sqlfiddle.com/#!9/0ee99/1

感谢借用你的大脑

1 个答案:

答案 0 :(得分:1)

您需要使用JOIN UPDATE语法作为

UPDATE settings_table st
join value_table vt on st.id = vt.id
set st.setting = 1
where
vt.lastupdate BETWEEN 0 AND 9999999999 
AND vt.listid = 206
AND st.eventtype = 'Sent an Email Campaign'
AND NOT EXISTS(
  SELECT 1
  FROM values_table AS t2
  WHERE st.id = t2.id 
  AND t2.certainvalue BETWEEN 0 AND 9999999999 
  AND t2.anothervalue IN ('different text', 'some other different text'))
)

更新: jpw 使用以下

创建的小提琴
UPDATE epaper_list_subscribers
JOIN epaper_list_subscriber_events 
ON epaper_list_subscriber_events.subscriberid=epaper_list_subscribers.subscriberid 
SET confirmed = 1     
WHERE     epaper_list_subscriber_events.lastupdate BETWEEN 0 AND 9999999999 
      AND epaper_list_subscriber_events.listid = 1
      AND epaper_list_subscriber_events.eventtype = 'Sent an Email Campaign'
      AND NOT EXISTS (SELECT 1
                      FROM epaper_list_subscriber_events AS t2
                      WHERE epaper_list_subscribers.subscriberid = t2.subscriberid 
                            AND t2.lastupdate BETWEEN 0 AND 9999999999 
                            AND t2.eventtype IN ('Opened an Email Campaign', 'Clicked on a link'))