Удалить из таблицы, если идентификатор не существует в другой таблице

Я хочу удалить идентификаторы из types, которых нет в types_photos, но я не знаю, как это сделать. id_type в types_photos такие же, как id в types. Вот как выглядит структура таблицы:

CREATE TABLE IF NOT EXISTS `types` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_user_added` int(11) DEFAULT '0',
  `id_user_edited` int(11) DEFAULT '0',
  `data_name` text NOT NULL,
  `data_name_seo` text NOT NULL,
  `data_type` enum('tag','equipment','search') NOT NULL,
  `datetime_added` datetime NOT NULL,
  `datetime_edited` datetime NOT NULL,
  `ipaddress_added` text NOT NULL,
  `ipaddress_edited` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
)

CREATE TABLE IF NOT EXISTS `types_photos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_user_added` int(11) DEFAULT '0',
  `id_user_edited` int(11) DEFAULT '0',
  `id_type` int(11) DEFAULT '0',
  `id_photo` int(11) DEFAULT '0',
  `datetime_added` datetime NOT NULL,
  `datetime_edited` datetime NOT NULL,
  `ipaddress_added` text NOT NULL,
  `ipaddress_edited` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
)

Итак, мой вопрос; как я могу удалить все идентификаторы из types, которых нет в types_photos?


person Airikr    schedule 20.10.2013    source источник


Ответы (1)


person    schedule
comment
Это работает как шарм! ^^ Большое спасибо за тихий ответ. Приму как только смогу :) - person Airikr; 21.10.2013
comment
@akash, я думаю, что этот запрос неприменим к таблицам с огромным количеством данных, потому что он слишком медленный. Можете ли вы предложить другой запрос, кроме этих? Спасибо. - person slek; 20.08.2014
comment
@slek Выберите записи для удаления во временной таблице, выполните внешнее соединение и удалите записи с нулевым идентификатором ... может сработать, не уверен - person Akash; 20.08.2014
comment
это не будет работать в доступе, я уже пробовал это раньше. кстати спасибо @Akash - person slek; 02.09.2014
comment
Что, если в наших таблицах есть составные ключи? В настоящее время мы используем таблицу, которая должна быть репликой рабочей таблицы. Но мы не делаем никаких удалений в случае изменения данных. Любой совет? - person Nerd in Training; 24.04.2015
comment
@NerdinTraining что-то вроде WITH CTE AS (SELECT c1,c2,c3 FROM types EXCEPT select c1,c2,c3 FROM types_photos ) DELETE types FROM types JOIN CTE c ON types.c1 = c.c1 AND types.c2=C=c2 AND types.C3=C.C3 должно работать, если предположить, что c1, c2, c3 являются вашими составными ключевыми столбцами. - person Akash; 25.04.2015