我是SQL的新手,现在已经在这里工作了6个小时,现在可以使用了。我一定很遗憾。简而言之:我想根据数据库中另一个表中的部分匹配字符串删除Wordpress数据库中的帖子。
这是我到目前为止所得到的。它应该解释我正在尝试做什么:
CASE
WHEN option_value FROM wp_options LIKE '%domain.com%'
THEN DELETE FROM wp_posts WHERE post_title = 'uniqueID'
ELSE DELETE FROM wp_posts WHERE post_title = 'XXXXXXXXXX'
END
如果不匹配,ELSE和X会确保没有任何变化。
我错过了什么? : - )
@Dan Bracuk这是最后的代码:
DELETE FROM wp_posts
WHERE post_title =
CASE
WHEN (SELECT option_value FROM wp_options WHERE option_value LIKE '%domain.com%' LIMIT 1) LIKE '%domain.com' THEN 'UniqueID'
ELSE 'XXXXXXX'
END
答案 0 :(得分:0)
如果没有更多的背景,很难给出明确的答案。但是,从最初查看代码开始,假设它需要遵循标准SQL语法,以下行需要从
更新option_value FROM wp_options LIKE '%domain.com%'
到
WHEN EXISTS(SELECT 1 FROM wp_options WHERE option_value LIKE '%domain.com%')
希望有所帮助!
答案 1 :(得分:0)
你可以尝试这样的事情,我相信它会有所帮助
IF ((SELECT COUNT(*) FROM wp_options WHERE post_title LIKE '%uniqueID%'))
BEGIN
DELETE FROM wp_posts WHERE post_title = 'uniqueID'
END
ELSE
BEGIN
DELETE FROM wp_posts WHERE post_title = 'XXXXXXXXXX'
END
答案 2 :(得分:0)
您的sql语法无效。它必须类似于:
delete from wp_posts
where post_title =
case
when (subquery to get data from option_value table) like '%domain.com%' then 'uniqueId'
else 'XXXXXXX'
end
但是,最好不要在这里使用案例构造。我会做这样的事情:
delete from wp_posts
where
(post_title = 'uniqueId'
and somefield in
(select somefield
from option_value
where wp_options like '%domain.com%'
)
)
or
(post_title = 'XXXXXX'
and somefield in
(select somefield
from option_value
except
select somefield
from option_value
where wp_options like '%domain.com%'
)
)
请注意,某些数据库使用的是minus而不是except,而其他数据库则不支持该语法。但是,这给了你一般的想法。
答案 3 :(得分:0)
这对你有用:
IF EXISTS (SELECT option_value FROM wp_options WHERE option_value LIKE '%domain.com%')
BEGIN
DELETE FROM wp_posts WHERE post_title = 'uniqueID'
END
如果ELSE不做任何事情,你不需要ELSE:)