使用Sub Query删除行?

时间:2012-06-01 18:18:03

标签: mysql sql database

使用LIKE

时,我似乎无法使用SQL
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位数字}}

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)

您的查询相当破碎。至少有两种方式:

  1. 您的子查询返回多行,但是在您希望获得单个结果的位置。

  2. 您需要引用LIKE字符串。

  3. 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)

  1. 你不能对数字字段做一个LIKE。
  2. 您不能在非DISTINCT的子选择上执行相等。
  3. 您必须使用“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)