Оператор выбора MySQL где table1.id! = Table2.id - PullRequest
4 голосов
/ 14 апреля 2010

У меня есть таблица данных, в которой есть сообщения, затем у меня есть отдельная таблица данных, в которой были удалены сообщения. Когда сообщение удаляется, происходит добавление его идентификатора в удаленную таблицу вместо удаления записи.

Что такое чистый эффективный способ выбора всех сообщений из таблицы сообщений, не выбирая те, чей идентификатор в удаленной таблице

Ответы [ 3 ]

2 голосов
/ 14 апреля 2010

Если вы не можете изменить таблицы, вы можете сделать Left Join (который присоединится к вашему deleted_table, когда это возможно), а затем проверить, что id равно Null ( означает, что строка не найдена).

Select everything_you_need
From post_table p
Left Join delete_table d On ( d.id = p.id )
Where d.id Is Null;

Убедитесь в том, что для максимальной производительности в обоих столбцах id имеются индексы.

2 голосов
/ 14 апреля 2010

Не будет ли проще добавить дополнительный столбец в таблицу сообщений и сохранить логическое значение удаленного? Или используйте целочисленное поле (для представления идентификатора пользователя), если вы хотите сохранить, кто его удалил, 0 = не удалено.

1 голос
/ 14 апреля 2010

Если у вас есть веская причина не использовать логический флаг, как рекомендует bigstylee, вы можете использовать подзапрос EXISTS:

SELECT * FROM table1 
  WHERE NOT EXISTS 
  (SELECT * FROM table2 WHERE table1.id=table2.id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...