(MySQL) Поиск наиболее оптимального решения.
От: MasterMind Россия  
Дата: 07.03.16 14:51
Оценка:
Есть две таблицы.

Таблица 1. Список какого то контента

mysql> desc contents;
+------------------+----------------------+------+-----+---------+----------------+
| Field            | Type                 | Null | Key | Default | Extra          |
+------------------+----------------------+------+-----+---------+----------------+
| id               | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| title            | varchar(255)         | NO   |     | NULL    |                |
+------------------+----------------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)



Tаблица 2. Список контента который не нужно отображать.

mysql> desc content_skip;
+-----------------+----------------------+------+-----+-------------------+----------------+
| Field           | Type                 | Null | Key | Default           | Extra          |
+-----------------+----------------------+------+-----+-------------------+----------------+
| id              | int(11)              | NO   | PRI | NULL              | auto_increment |
| content_id      | int(11)              | YES  |     | 0                 |                |
+-----------------+----------------------+------+-----+-------------------+----------------+
2 rows in set (0.00 sec)


Суть вопроса в следующем:

Нужно вернуть данные из Таблица 1 такие, которые не входят в таблицу Tаблица 2. Соответственно, есть два решения.

1.
 select id from contents where id not in (select content_id from content_skip)


2. Выбрать сразу все id content_skip и потом в перечислении добавить.

 select id from contents where id not in (3,4,5)



Первый запрос не нравится DEPENDENT SUBQUERY, а второй тем, что этих id может быть очень большая куча, что в итоге превысит размер пакета запроса.
Вопрос, что можно еще придумать наиболее?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.