2012-06-06 2 views
2

У меня проблема с 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. Таким образом, у них нет записи в t он рассматривает таблицу.

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

ответ

3
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 
+0

благодарим вас за ответ, я собираюсь использовать ваше решение! – Vojtech

4

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

SELECT user_id 
FROM users 
WHERE user_id NOT IN (
    SELECT user_id 
    FROM views 
    WHERE article_id = 10 
) 
+0

спасибо за ваш ответ .. это работает, однако я буду придерживаться приведенных ниже ответов из-за производительности :) – Vojtech

+0

@Vojtech не проблема :) – flowfree

+0

Перед тем, как решить, какой вариант выбрать, тест (производительность). –

3

делать НЕ В запросах обычно не велика для выполнения ... вместо того, чтобы, используя 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 
+0

Разница в производительности: не соответствует действительности, в соответствии с @Quassnoi. См.: [НЕ В ПРОТИВ НЕ СУЩЕСТВУЮТ против LEFT JOIN/IS NULL: MySQL] (http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join- is-null-mysql /) –

+0

благодарю вас за ответ, vearutop, однако, отправил ответ немного быстрее, и я дам ему правильный ответ .. еще раз спасибо! – Vojtech

+0

@Vojtech, я могу уважать это ... однако просто отправить запрос без объяснений ... действительно ли это поможет вам понять, ПОЧЕМУ что-то работает? Я пытаюсь описать ПОЧЕМУ за некоторыми подходами к опросу. – DRapp

Смежные вопросы

 Смежные вопросы