我之前试图找到答案,但也许我是以一种太难的方式问它,因此重写。
我有两张桌子。我需要在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/3
和select
声明:
http://sqlfiddle.com/#!9/0ee99/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'))