我有一张看起来像这样的表。
CREATE TABLE tshirt
(
id serial,
sku character varying(255) NOT NULL
);
我想用我想要的sku只删除一行,但是DELETE FROM tshirt WHERE sku='%s';
删除具有该sku的所有条目。我怎么能这样做?
答案 0 :(得分:3)
这会删除除了一个以外的所有内容(这对我来说比删除完全一个更有意义)
DELETE FROM tshirt del
WHERE del.sku = '%s';
AND EXISTS (
SELECT *
FROM tshirt ex
WHERE ex.shu = del.shu -- same shirt
and ex.id < del.id -- different number
);
BTW:为了避免将来遇到这种问题,你应该在表定义中添加一些约束:
CREATE TABLE tshirt
(
-- surrogate key
id serial NOT NULL PRIMARY KEY
-- natural key
, sku character varying(255) NOT NULL UNIQUE
);
答案 1 :(得分:2)
不是最好的方式,但
DELETE FROM tshirt WHERE id IN(SELECT id FROM tshirt WHERE sku ='%s'LIMIT 1)
答案 2 :(得分:2)
您可以利用每个表中的隐式ctid列。
# create temporary table foo ( x integer );
CREATE TABLE
Time: 4.267 ms
# insert into foo values (1),(2),(3);
INSERT 0 3
Time: 0.549 ms
# delete from foo where ctid = (select ctid from foo limit 1) returning *;
x
---
1
(1 row)
DELETE 1
Time: 0.737 ms
# select * from foo;
x
---
2
3
(2 rows)
时间:0.267毫秒
答案 3 :(得分:0)
通过添加其他约束(例如
)告诉您要删除的数据库哪个行DELETE FROM tshirt WHERE sku ='sku_you_like_to_match'和serial ='555';
答案 4 :(得分:0)
尝试使用LIMIT
关键字:
DELETE FROM tshirt WHERE sku='%s' LIMIT 1;
答案 5 :(得分:0)
此SQL Server DELETE TOP示例将从lastsname为'Anderson'的employees表中删除第一条记录。如果employees表中还有其他记录的姓氏为“ Anderson”,则它们不会被DELETE TOP语句删除。
DELETE TOP(1)
FROM employees
WHERE last_name = 'Anderson';