Помогите преобразовать вложенный подзапрос SQL, чтобы присоединиться к запросу для совместимости с mysql 4.0
У меня есть вложенный запрос SQL:
SELECT DISTINCT(topic_id)
FROM bb_posts
WHERE topic_id NOT IN (
SELECT topic_id FROM bb_posts
WHERE poster_id = $user_id AND post_status = 0 )
ORDER BY post_time DESC
Мой веб-сервер работает под управлением MySQL 4.0, который не разрешает вложенные запросы. Может ли какой-нибудь гуру SQL предложить тот же запрос, используя язык JOIN? Я пытался и пытался и пытался... но я не могу понять это. Чувствую себя тупым.
2 ответа
Решение
Предполагая, что topic_id не обнуляем, вы можете сделать:
SELECT DISTINCT(T1.topic_id)
FROM bb_posts As T1
Left Join bb_posts As T2
On T2.topic_id = T1.topic_id
And T2.poster_id = $user_id
And T2.post_status = 0
Where T2.topic_id Is Null
ORDER BY T1.post_time DESC
Я не совсем уверен, каково ваше требование, но, посмотрев на ваш запрос, я думаю, что этого будет достаточно.
SELECT DISTINCT(topic_id)
FROM bb_posts
WHERE poster_id <> $user_id OR post_status <> 0
ORDER BY post_time DESC