Sql 带有子查询的Delete语句

Sql 带有子查询的Delete语句,sql,Sql,我必须为customer表编写一个delete语句。删除尚未下订单的客户。使用子查询和exist运算符 我对这个查询的正确显示方式有问题 这是我测试过的,但没有运气。有人能告诉我如何修正这句话吗 delete customers from dbo.customers WHERE (customerID NOT exist (SELECT customerID FROM

我必须为customer表编写一个delete语句。删除尚未下订单的客户。使用子查询和exist运算符

我对这个查询的正确显示方式有问题 这是我测试过的,但没有运气。有人能告诉我如何修正这句话吗

         delete customers from  dbo.customers
        WHERE        (customerID NOT exist
       (SELECT  customerID
                           FROM            dbo.Orders
                           where customerid = ordersid))

使用
exist
运算符的语法有点不正确,尽管总体思路是正确的:

DELETE FROM  dbo.customers
WHERE        NOT EXISTS (SELECT *
                         FROM   dbo.orders
                         WHERE  dbo.customers.customer_id = 
                                dbo.orders.customer_id)  

我认为你的问题在于你的次选择的where子句。您正在将customId与ordersId进行比较,而您很可能不想这样做。尝试从子选择中删除where子句,因为您希望确保customerId不在未筛选订单表中,而不是不存在not in。您还需要确保为这样的语句编制了customerID索引

delete customers from dbo.customers
where customerID not in (SELECT  customerID FROM dbo.Orders)

我同意以下观点

DELETE FROM  dbo.customers
WHERE dbo.customers.customer_id not in (
    SELECT dbo.orders.customer_id 
    FROM dbo.orders 
    GROUP BY dbo.orders.customer_id
)

应使用以下链接:

尽管查看您的代码,但下面的语句应该可以工作

这是假设您有一个customers表和一个orders表,并且customerid位于两个表中,将客户链接到订单。每个订单上都有一个customerid,因此如果在子查询中找不到customer表中的customerid,则它们没有订单

delete from dbo.customers t1
where t1.customerID not in
(select distinct customerid from dbo.orders)

您的语法是关闭的,但您的逻辑也是关闭的——您不需要相关的子查询(即为每一行运行的子查询,因为它使用来自该行的值)。相反,只需这样做:

delete from customers
where customerID not in (select customerID from orders)

您正在使用哪些RDBMS?