2016-05-13 3 views
0

Скажем, у меня есть таблица, создающая связь между CUSTOMER_ID и B_CODE. Существует несколько экземпляров CUSTOMER_ID, имеющих разные B_CODE. Я создаю пользовательский интерфейс, способный добавлять и удалять коды из этой таблицы на основе пользовательского интерфейса swaplist. Я знаю, как вставлять несколько строк в один и тот же запрос, но я не уверен, как сделать то же самое при удалении.Удаление нескольких строк по одному и тому же запросу

Я знаю, что могу просто удалить все экземпляры упомянутого CUSTOMER_ID, а затем добавить то, что осталось в списке. Но это похоже на плохой способ сделать это.

Так как я могу удалить несколько строк в этой таблице с тем же идентификатором, разными кодами, в том же запросе, но без удаления всех экземпляров такого ID?

Так, например, я получил эту

+------------+---------+ 
| 123  | A  | 
| 124  | B  | 
| 123  | C  | 
| 123  | D  | 
| 124  | E  | 
| 123  | F  | 
+------------+---------+ 

И я только хочу, чтобы удалить 123 -> A, 123 -> C и 123 -> F, но не 123 -> D, и в том же запросе.

+0

Просьба предоставить данные и ожидаемые результаты, тогда вам будет легче помочь ... – MrSimpleMind

+0

@MrSimpleMind Конечно, форматирование не самое лучшее. – Zerjack

ответ

0

SqlFiddle

(а) Если вы хотите удалить все строки, которые вы знаете b_code для:

delete from t where customer_id = 123 and b_code in ('A','C','F'); 

(б) Или, если вы хотите удалить все строки кроме тех, которые вы знаете b_code для

delete from t where customer_id = 123 and b_code not in ('D'); 

Используйте (a), если для удаления выбрано несколько b_codes.

Используйте (b) если у вас осталось несколько b_codes.

+0

Нет, я хочу удалить некоторые строки с определенным customer_id, но не все из них – Zerjack

+0

@Zerjack см. Мой обновленный ответ, я только что видел ваше редактирование. – MrSimpleMind

+1

Да, это то, что я ищу. Благодаря! – Zerjack

0

Если я понимаю, что у вас есть пользовательский интерфейс, который позволит удалить несколько кодов на одного клиента. Я не уверен, каковы критерии, из которых запись выбирается для сохранения. В вашем примере вы выбираете D. В сценарии пользовательского интерфейса я бы подумал, что пользователь не будет выбирать D для удаления.

К корневому вопросу, если я правильно понимаю, вы можете использовать Row_Number и/Rank для запроса записей, которые вы хотите удалить. Поскольку вы выбираете D в своем примере, вы не можете полагаться на простой порядок в функции окна, у вас может быть поле сортировки или связанная таблица, чтобы убедиться, что вы выбрали правильную запись «хранитель».

+0

Хммм .... Честно говоря, я не мог понять многое из того, что вы сказали ... Нет никаких критериев. Всего два списка в режиме пользовательского интерфейса свопа, которые позволяют пользователю выбирать, что сохранить и что удалить. – Zerjack

+0

Моя точка зрения заключалась в том, что вы можете использовать номер строки и/или ранг вместе с идентификатором клиента, чтобы упорядочить строки таким образом, чтобы определенная строка выбиралась как хранитель, а не жестко кодировала значения.Я не знаком с swapUI, и поэтому я предполагаю, что это намного проще, чем я сначала подумал. –

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