使用LIKE
DELETE FROM `customer_numbers`
WHERE number NOT LIKE (SELECT number FROM number_part)%
如果constomer_numbers
表格中不包含number
number_part
表格中的所有行
实施例:
customer_numbers.number = 0559354544和number_part.number = 05593 - 它不应该删除..但是如果05593不包含在customer_numbers.number
中,那么从customer_numbers表中删除行..它应匹配来自{{1的前5位数字}}
答案 0 :(得分:2)
你不能使用不喜欢列表(在大多数数据库中,我很确定在mysql中这是真的)。
相反,您可以使用相关子查询:
DELETE FROM `customer_numbers`
WHERE not exists (SELECT number FROM number_part
where customer_numbers.number like concat(number, '%')
)
答案 1 :(得分:1)
您的查询相当破碎。至少有两种方式:
您的子查询返回多行,但是在您希望获得单个结果的位置。
您需要引用LIKE字符串。
2可能很容易修复。尝试:
... WHERE number LIKE CONCAT((SELECT ... LIMIT 1),'%');
但是, 1确实是你的问题。如果您将子选择作为单个命令运行,我希望您将获得多行,对吧?您希望如何将数字列表(例如,1, 2, 3, 4, 5
)视为LIKE字符串的一部分?
我猜你想要的是LIKE '1%' OR LIKE '2%' OR LIKE '3%'...
等等......不是吗?
无论如何,如果你能更准确地告诉我们你想要做什么,我们可以帮助你更好地解决问题。
正如你的问题措辞一样,我只能说:这种方法不起作用。
答案 2 :(得分:1)
你命名了你的字段数字,但由于前导0似乎它们是字符值,所以我假设它们是字符字段。
如果您的部件号总是长达5个字符,那么您可以执行以下操作:
DELETE FROM `customer_numbers`
WHERE substring(number,1,5) NOT IN (SELECT number FROM number_part)
答案 3 :(得分:0)
您必须使用“IN”。
DELETE FROM `customer_numbers` WHERE number NOT IN (SELECT number FROM number_part)
答案 4 :(得分:0)
这样的事情怎么样:
DELETE FROM customer_numbers WHERE number NOT IN (SELECT number FROM number_part)