我有两张桌子:
表:选项
Options
Id xItems
- ItemA,ItemB,ItemC,etc
表:项目
Items
Id
-
我正在尝试删除Options.xitems
中未列出的所有项目行我试图执行SQL语句
DELETE FROM items
Where items.id NOT IN (SELECT xitems FROM options)
然而问题是XItems中包含多个值,我只设法删除Item.Id是第一个或唯一值的行。 非常感谢任何帮助
编辑:以下更新已从OP的帖子中添加为答案。
服务器是MySQL(相应地编辑标签),允许用户输入下面的SQL语句来对任何数据库表执行。我是一个前端开发者,并对这些东西感到困惑。
John,我运行了您发布的代码。以下是我对备份测试表应用的实际代码
DELETE FROM xbak514q_ecom_prodoptionsel
WHERE NOT FIND_IN_SET(xbak514q_ecom_prodoptionsel.id, (SELECT xprodoptionsel FROM xbak514q_ecom_prodoptions))
返回了以下错误:
执行提交的SQL语句时遇到问题。 该错误报告为:MySQL扩展遇到问题 提交SQL语句。 MySQL将错误报告为:子查询 返回超过1行
此数据库由设置e-comm网站的软件公司配置。项目,产品选项和选择项目(附加)非常广泛。我应该考虑重新格式化表吗?
再次感谢您的帮助
答案 0 :(得分:1)
您是否尝试过使用find_in_set()
??
DELETE FROM items
WHERE NOT FIND_IN_SET(items.id, (SELECT xitems FROM options))
<强> FIDDLE DEMO 强>
find_in_set()
仅适用于MySQL,但由于您已对其进行了标记,因此这可能是也可能不是解决方案。但是该函数查找以逗号分隔的列表,该列表是单个字符串或项目,并将第一个参数作为搜索字符串
你应该从不将数据存储在数据库中作为逗号分隔的列表......将来会导致巨大问题。请考虑规范化您的数据库。如果你想要一种方法,只需发表评论,我会写一个会为你规范化的查询。