我必须为customer表编写一个delete语句。删除未输入任何订单的客户。使用子查询和存在的运算符。
我无法正确显示此查询的方式 这是我测试过的,没有运气。谁能告诉我如何解决这个问题呢?
delete customers from dbo.customers
WHERE (customerID NOT exist
(SELECT customerID
FROM dbo.Orders
where customerid = ordersid))
答案 0 :(得分:1)
使用exist
运算符的语法略有偏差,但总体思路是正确的方向:
DELETE FROM dbo.customers
WHERE NOT EXISTS (SELECT *
FROM dbo.orders
WHERE dbo.customers.customer_id =
dbo.orders.customer_id)
答案 1 :(得分:1)
我认为你的问题在于你的subselect的where子句。您将customId与您最不想做的ordersId进行比较。尝试简单地从subselect中删除where子句,因为你想确保customerId不在未经过滤的Orders表中,而不是不存在不执行。你还需要确保你为一个语句索引了customerID此
delete customers from dbo.customers
where customerID not in (SELECT customerID FROM dbo.Orders)
答案 2 :(得分:1)
您的语法已关闭,但您的逻辑也是如此 - 您不需要相关子查询(即每行运行一个子查询,因为它使用行中的值)。相反,只需这样做:
delete from customers
where customerID not in (select customerID from orders)
答案 3 :(得分:0)
我选择以下内容。
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
)
答案 4 :(得分:0)
以下链接应该是有用的: http://www.w3schools.com/sql/sql_delete.asp
虽然查看了您的代码,但以下声明应该有效。
这假设您有一个customers表和一个订单表,而customerid在两个表中,将客户与订单相关联。每个订单上都有一个customerid,因此如果在子查询中找不到customer表中的customerid,那么他们就没有订单。
delete from dbo.customers t1
where t1.customerID not in
(select distinct customerid from dbo.orders)