Помогите преобразовать вложенный подзапрос SQL для запроса соединения для совместимости с mysql 4.0 - PullRequest
1 голос
/ 12 ноября 2010

У меня есть вложенный запрос 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 ]

2 голосов
/ 12 ноября 2010

Предполагая, что 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
1 голос
/ 12 ноября 2010

Я не совсем уверен, каково ваше требование, но, посмотрев на ваш запрос, я думаю, что этого будет достаточно.

SELECT DISTINCT(topic_id) 
FROM bb_posts 
WHERE poster_id <> $user_id OR post_status <> 0 
ORDER BY post_time DESC
...