Я пытаюсь удалить неиспользуемые строки из таблицы. Это упрощенный пример моей проблемы:Как удалить неиспользуемые строки из таблицы БД с помощью SQL?
Есть 2 таблицы:
user table:
user_id user_name
--------------------
1 Mike
3 Carol
8 Eric
address table:
user_id address
-----------------------
1 [email protected]
3 [email protected]
10 [email protected]
3 [email protected]
Я хочу удалить неиспользуемые адреса из таблицы адресов. Если user_id адреса существует в таблице пользователя, адрес не используется. В таблице примеров есть один неиспользуемый адрес: [email protected]
Я новичок в SQL, и мое решение было некрасиво:
DELETE FROM address
WHERE NOT EXISTS
(SELECT * FROM user WHERE address.user_id = user.user_id);
Там должен быть лучший способ сделать это. Каков наилучший способ сделать это?
sqlite используется.
Не выглядит слишком уродливым для меня, что вы хотите улучшить - посмотрите, производительность? –
Вот как бы я это сделал. После того, как вы установили ссылочную целостность, это не повторится. Если у вас нет/не может быть ссылочной целостности, тогда «уродливое» - лучшее, что вы можете иметь. –
@paul: Я просто ищу обычную практику, как эта проблема обычно решается. Кроме того, я беспокоился о производительности: похоже, что поиск инструкции select выполняется один раз для каждой строки таблицы адресов. – SKi