我有表AddClient
Id cId name amount
10L CL-J Jon 5000
10L CL-B Ben 4000
10L CL-J Jon 6000
10L CL-B Ben 8000
10L CL-T Tony 9000
10L CL-J Jon 5000
当我尝试删除像这样的记录时
DELETE from AddClient where cId = 'CL-J' or name = 'Jon'
删除Jon的所有记录。我想删除一个Jon的记录。
答案 0 :(得分:1)
一个明显的解决方案是使用AND
而不是OR
:
DELETE FROM AddClient
WHERE cId = 'CL-J' AND name = 'Jon';
这仍然会导致删除两条记录,因此它并不是您想要的。但逻辑似乎更清楚(对于局外人)。
如果您的SQLite启用了该功能,则可以使用:
DELETE FROM AddClient
WHERE cId = 'CL-J' AND name = 'Jon'
LIMIT 1;
(请阅读here,了解LIMIT
的可选DELETE
条款。)
另一种选择是使用rowid
:
DELETE FROM AddClient
WHERE rowid = (SELECT MIN(rowid)
FROM AddClient
WHERE cId = 'CL-J' AND name = 'Jon'
);
答案 1 :(得分:0)
好吧,当你说"我只想删除Jon的一条记录。"您需要指定要删除的元组(行)的其他属性(列)。使用AND
运算符的问题是 ALL 的名称属性为' John'也有' CL-J'的cId属性因此,实际上,您仍然删除与使用OR
运算符时相同的行数。
我还发现,Id
列与名称为' John'的所有记录完全相同,唯一的区分列是amount
。因此,如果您真的只想删除约翰的一条记录,那么您只需 ONLY 选项:
DELETE
FROM AddClient
WHERE name = 'John'
AND amount = 6000;
我希望这会对你有所帮助。干杯!
答案 2 :(得分:0)
如果您正在使用Mysql
DELETE FROM AddClient WHERE NAME='john' LIMIT 1;
或者您也可以根据每条记录的b / c金额不同删除单个记录.....
DELETE
FROM AddClient
WHERE name = 'John'
AND amount = '5000';