Удалить записи из освобожденных таблиц - PullRequest
2 голосов
/ 27 августа 2010

У меня есть 2 таблицы: Contacts и Users.

Contacts таблица содержит user_id, что относится к id в Users таблице. Contacts также содержит list_type столбец.

Contacts: user_id, list_type Users: id, data

Как мне удалить записи / строки из обеих таблиц (Contacts и Users), которые ссылаются на данный list_type?

Хитрость в том, что я не хочу удалять users, который принадлежит другим контактам list_type.

EDIT:

Пример: * * тысяча двадцать-восемь

Users (id,data)
1    John
2    Kate
3    Alan
4    Bob

Contacts (user_id, list_type)
1    1
3    1
1    2
4    2
2    2

Теперь я хотел бы удалить list_type = 2, результат должен быть:

Users (id,data)
1    John - still is here, because it was also referring to list_type = 1 
3    Alan

Contacts (user_id, list_type)
1    1
3    1

Ответы [ 3 ]

2 голосов
/ 27 августа 2010

Разбейте его на два шага;

SQLiteDatabase db;
        Cursor c = db
                .query("Contacts", new String[] { "user_id" }, "list_type=?",
                        new String[] { "list_type_1" }, null, null, null);

        if(c.moveToFirst()){
            do{
                db.delete("Users", "user_id=?",new String[]{c.getString(c.getColumnIndex("user_id"))});
            }while(c.moveToNext()));
        }

        db.delete("Contacts", "list_type=?", new String[]{"list_type_1"});
1 голос
/ 28 августа 2010

Я бы соблазнился сделать это с помощью SQL.Позвольте базе данных управлять и очистить себя, говорю я.Меньше взад-вперед между базой данных и вашим приложением, более быстрое выполнение и меньше кода для обслуживания.

После любого удаления из Контактов выполните следующий запрос:

DELETE FROM Users WHERE Id NOT IN (SELECT DISTINCT User_id FROM Contacts);

Или выможет создать триггер и добавить его в вашу схему (что еще более громкая связь!):

CREATE TRIGGER CleanUsers AFTER DELETE ON Contacts 
  BEGIN
    DELETE FROM Users WHERE Id NOT IN (SELECT DISTINCT User_id FROM Contacts);
  END;
1 голос
/ 27 августа 2010

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

   select user_ids from contacts where list_type=some_type;

    while(resultSet.next()){
         String userid=restultSet.getString(1);
         delete from users where user_ids=userid;
    }
    delete from contacts where list_type=some_type;

РЕДАКТИРОВАТЬ:

resultSet_1 = select user_ids from contacts where list_type=some_type;  

while(resultSet_1.next()){
   String userid=resultSet_1.getString(1);
   resultSet_2 = select count(user_ids) from contacts where user_id=userid group by user_ids;
   int count=resultSet_2.getInt(1);

   if(count==1){     //if more than 1 it means contact is in more than one list_type
       delete from users where user_ids=userid;
   }
}
delete from contacts where list_type=some_type;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...