Как сделать этот вид запроса? - PullRequest
2 голосов
/ 07 августа 2009

A пользователь может иметь суспензии . Я хочу выбрать пользователя и его приостановок , но мне нужны только те приостановки, для которых подвесок.suspended_date> now () Я хочу вернуть пользователя независимо.

Звучит как соединение слева, но:

SELECT *
FROM users
LEFT JOIN suspensions ON suspensions.user_id=users.id
WHERE suspensions.suspended_date > now()

Работает нормально, если у них действительно есть приостановки, но может вызвать проблемы, если у них их нет, потому что предложение where всегда будет неудачным.

Как мне написать это одним запросом?

Ответы [ 3 ]

3 голосов
/ 07 августа 2009

вы можете попробовать переместить фильтр из WHERE в оператор JOIN

SELECT *
FROM   users 
       LEFT JOIN suspensions 
       ON suspensions.user_id=users.id AND suspensions.suspended_date > now()
0 голосов
/ 07 августа 2009

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

SELECT *
FROM users
LEFT JOIN suspensions ON suspensions.user_id=users.id
WHERE suspensions.suspended_date > now() or suspensions.user is null 
0 голосов
/ 07 августа 2009
SELECT *
FROM users
LEFT JOIN suspensions ON suspensions.user_id=users.id
WHERE suspensions.suspended_date > now() or suspensions.suspended_date is null

Это должно сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...