我正在研究一个数据库项目,为了理智,我想在测试它的其他功能时从数据库中删除所有问题数据。
我目前有一些查询,以帮助我找到我的问题数据集,如下面的代码:
def update(self):
ret, frame = self.video.read()
if self.ok:
self.out.write(frame)
if ret:
self.photo = PIL.ImageTk.PhotoImage(image=PIL.Image.fromarray(frame))
self.canvas.create_image(0, 0, image=self.photo, anchor=tkinter.NW)
self.window.after(self.delay, self.update)
现在我希望能够从Temp Table中删除我在这些查询中找到的所有数据。但是将代码放在:
SELECT Order_ID, Part_Number, COUNT(*)
FROM Temp_A
GROUP BY Order_ID, Part_Number
HAVING COUNT(*) > 1
似乎不起作用,因为我收到语法错误。我已尝试删除DELETE FROM Temp_A
WHERE IN (/*MY QUERY*/)
,将IN
更改为WHERE
,我不确定如何构建此查询以使其按照我希望的方式执行操作。
答案 0 :(得分:2)
一种方法是使用INNER JOIN
:
DELETE A
FROM Temp_A A
INNER JOIN (SELECT Order_ID, Part_Number, COUNT(*)
FROM Temp_A
GROUP BY Order_ID, Part_Number
HAVING COUNT(*) > 1) B
ON A.Order_ID = B.Order_ID
AND A.Part_Number = B.Part_Number
;
如果您使用的是SQL Server 2005+,则可以使用CTE
:
WITH CTE AS
(
SELECT *,
N = COUNT(*) OVER(PARTITION BY OrderID, Part_Number)
FROM Temp_A
)
DELETE FROM CTE
WHERE N > 1
;
答案 1 :(得分:0)
可以通过Order_ID删除吗?如果是这样,你可以在技术上尝试以下
DELETE FROM Temp_A
where Order_ID IN(
SELECT Order_ID
FROM Temp_A
GROUP BY Order_ID, Part_Number
HAVING COUNT(*) > 1)
这将选择您上面包含的相同选择列表,但实际上只选择Order_ID,从而返回您要删除的Order_ID列表
正如所指出的那样,只有在Order_ID是主键的情况下才会有效! eep,所以不完美我承认