根据表Y中存在的值删除表X中的行

时间:2013-07-05 13:22:45

标签: sql wordpress

我是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

4 个答案:

答案 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:)