Выбор пользователей из одной таблицы, когда нет в другой - PullRequest
0 голосов
/ 04 марта 2012

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

SELECT DATE(registered)
FROM users
WHERE user_id= ".$currentUser."
ORDER BY registered ASC
LIMIT 1

Мне нужно изменить исходный запрос, присоединившись к другой таблице, чтобы убедиться, что пользователь не присутствует во второй таблице («доступ»), где идентификатор члена ниже определенного значения, а дата ДОСТУПА ниже определенной даты.

LEFT JOIN access ON (users.user_id = access.user_id)
WHERE access.user_id < 500
AND access.date ... after March 1, 2012

Не уверен, как собрать этих двоих.

Ответы [ 2 ]

2 голосов
/ 04 марта 2012

Вы можете использовать коррелированный подзапрос, например:

  SELECT DATE(u.registered)
    FROM users u
   WHERE u.user_id = ".$currentUser."

     AND NOT EXISTS (
             SELECT 1 
               FROM access a 
              WHERE u.user_id = a.user_id
                AND a.user_id < 500
                AND a.date > DATE '2012-03-01')

ORDER BY registered ASC 
LIMIT 1;

Некоторые примечания:
Вы все еще получите строку назад, даже если в таблице access нет соответствующих строк
Вы, вероятно, знаете это ... ASC - порядок сортировки по умолчанию, поэтому вам не нужно его печатать.

2 голосов
/ 04 марта 2012

Вам нужно поместить все условие в объединение, иначе вы фактически превратите его во внутреннее объединение:

...
LEFT JOIN access ON (
  users.user_id = access.user_id
  AND access.user_id < 500
  AND access.date >= '20120301'
)
WHERE access.user_id is null
...
...