2016-09-12 4 views
-2

У меня есть таблица 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' 

он удаляет все записи Джона. Я хочу удалить только одну запись Джона.

+3

Итак, какой из них вы хотите удалить? – jarlh

+0

Вам нужно 'cId = 'CL-J' и name = 'Jon''. – redneb

+0

Ну, какой из них вы хотите удалить? – Siyual

ответ

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' 
       ); 
0

Ну, когда вы говорите: «Я хочу удалить только одну запись Джона». Вам нужно указать, какой другой атрибут (столбец) кортежа (строки) вы хотите удалить. Проблема с использованием оператора AND заключается в том, что Все строки строк, которые имеют атрибут name 'John', также имеют атрибут cId для 'CL-J', поэтому вы по-прежнему удаляете такое же количество строк, как если бы вы использовали оператор OR.

Я также заметить, что Id колонки идентичны, а также для ВСЕХ записей с именем «Джон», единственный дифференцирующий столбец amount. Поэтому, если вы действительно хотите удалить только одну запись Джона, вы ТОЛЬКО вариант заключается в следующем:

DELETE 
FROM AddClient 
WHERE name = 'John' 
AND amount = 6000; 

Я надеюсь, что это поможет вам. Ура!

Смежные вопросы