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