从 PC table 中删除具有最小硬盘大小或最小内存大小的计算机

Delete from PC table the computers having minimal hdd size or minimal ram size

PC(代码、型号、速度、ram、hd、cd、价格)

我正在编写查询

delete from PC  
where exists
(select model , min(hd), min(ram) from PC
group by model)

但没有得到正确的结果

预期结果是

 code   model   speed   ram hd  cd  price
    2   1121    750 128 14.0    40x 850.0000
    4   1121    600 128 14.0    40x 850.0000
    5   1121    600 128 8.0 40x 850.0000
    6   1233    750 128 20.0    50x 950.0000
    8   1232    450 64  8.0 24x 350.0000
    11  1233    900 128 40.0    40x 980.0000

有人可以纠正我的查询吗?

您的 EXISTS 只会删除 table 中 EXISTS 条件为真的任何内容。您可以了解更多 here.

您只需要删除指向 window 函数的记录。您可以了解更多信息 here.

如果您只是想删除具有最低 hd 和 ram 的记录,那么下面的内容应该对您有所帮助。请注意,以下将首先按 hd 排序,然后按 ram 排序。所以hd最小的记录总是先被删除

BEGIN TRAN;
DELETE p FROM PC p
INNER JOIN
(
SELECT Code,
ROW_NUMBER() OVER (PARTITION BY model ORDER BY hd DESC, ram DESC) [RNum]
) m ON m.Code = p.Code AND m.RNum = 1;
--COMMIT TRAN;
--ROLLBACK TRAN;

您需要关联子句。否则,您将删除所有行(如果子查询 returns 有任何行)或没有行(如果子查询 returns 没有行)。

让您感到困惑的是group by。您需要一个相关子句。我会把它写成两个不同的比较:

delete from PC  
where hd = (select min(hd)
            from PC pc2
            where pc2.model = pc.model
           ) or
      ram = (select min(ram) 
             from PC pc2
             where pc2.model = pc.model
            );