日期:2014-05-17  浏览次数:20431 次

SQL:两表查询和删除,这么写有问题吗?
有两个表,一个订单表tborder,另一个订单详细表tbitem
订单表tborder主键为order_id,订单详细表tbitem的主键为order_id+item_id。
现发现订单表中有的order_id没有出现在订单详细表中。
为了整合数据,要把这些order_id找出来并删除。
SELEC * FROM tborder a WHERE a.order_id not in (SELECT b.order_id FROM tbitem b)
DELETE FROM tborder a WHERE a.order_id not in (SELECT b.order_id FROM tbitem b)

这两条SQL语句有什么问题吗?还有什么更好的SQL吗?
望指教。。

------解决方案--------------------


SELEC * FROM tborder a WHERE not exists(
  SELECT top(1)1 from tbitem b where a.order_id=b.order_id
)
DELETE FROM tborder a WHERE  not exists(
  SELECT top(1)1 from tbitem b where a.order_id=b.order_id
)

------解决方案--------------------

--查询
SELECT * 
FROM tborder
WHERE order_id not in (SELECT order_id FROM tbitem)
--删除
DELETE FROM tborder
WHERE order_id not in (SELECT order_id FROM tbitem)


或者:
SELECT * 
FROM tborder a
WHERE not exists(SELECT 1 FROM tbitem b where a.order_id=b.order_id)

DELETE FROM tborder a
WHERE not exists(SELECT 1 FROM tbitem b where a.order_id=b.order_id)