MySQL выбирает конкретную запись из таблицы, которой нет в другой таблице

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

Таблица пользователей:

    user_id,username,password (plus other columns not important to this)

Столовые статьи:

    article_is,user_id,content (plus others)

Табличные представления (используются для хранения данных, если пользователь просматривал конкретную статью):

   view_id,article_id,user_id,date

Теперь я пытаюсь выбрать тех пользователей, которые НЕ читали определенную статью, например статью с идентификатором 10. Поэтому у них нет записи в таблице представлений.

Надеюсь, теперь это имеет больше смысла. Спасибо за ваши ответы. V.

Ответы на вопрос(3)

выполнение запросов NOT IN, как правило, не очень хорошо для производительности ... вместо этого лучше использовать LEFT JOIN и искать NULL.

select 
      u.User_ID
   from 
      Users U
         LEFT JOIN Views V
            on U.User_ID = V.User_ID 
           AND v.Article_ID = 10
   where
      V.User_ID IS NULL
 06 июн. 2012 г., 12:35
Разница в производительности: не соответствует действительности, согласно @Quassnoi. Увидеть:NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL: MySQL
 Vojtech06 июн. 2012 г., 12:46
спасибо за ответ, однако vearutop опубликовал ответ немного быстрее, и я дам ему правильный ответ .. еще раз спасибо!
 06 июн. 2012 г., 13:27
@ Vojtech, я могу уважать это ... однако, просто отправив запрос без объяснения ... это действительно поможет вам понять, ПОЧЕМУ что-то работает? Я пытаюсь описать, ПОЧЕМУ стоит делать определенный подход к запросам.

Попробуй это:

SELECT user_id
FROM users
WHERE user_id NOT IN (
  SELECT user_id
  FROM views
  WHERE article_id = 10
)
 06 июн. 2012 г., 12:36
@ Войтех без проблем :)
 06 июн. 2012 г., 12:37
Прежде чем решить, какую версию выбрать, протестируйте (производительность).
 Vojtech06 июн. 2012 г., 12:35
спасибо за ваш ответ .. это работает, однако я буду придерживаться следующих ответов из-за производительности :)
 Vojtech06 июн. 2012 г., 12:37
да, выяснилось, что не так много различий в производительности, .. очень плохо, я не могу отметить больше ответов как правильные: /
 Vojtech06 июн. 2012 г., 12:40
@ypercube У меня есть только небольшое количество записей, которые я могу примерить. Общее время одинаково для обоих методов, есть различия во времени отдельных шагов. Какой метод, по вашему мнению, лучше?
Решение Вопроса
SELECT user_id FROM users u
LEFT JOIN views v ON v.user_id=u.user_id AND v.article_id = 10
WHERE v.user_id IS NULL
 Vojtech06 июн. 2012 г., 12:47
спасибо за ваш ответ, я собираюсь использовать ваше решение!

Ваш ответ на вопрос