2013-08-09 3 views
-2

У меня есть запрос MySQL:Упростите запрос MySQL, пожалуйста,

SELECT p.* FROM posts p 
WHERE 
(
    p.userid in 
    (
     select blogid from abos where userid=11 
    ) 
    OR p.userid = 11 
) 
AND NOT EXISTS 
(
    SELECT null FROM posts_denied r 
    WHERE r.post_id = p.id AND r.userid = 11 
) 
order by p.id DESC limit 5 

Я хотел бы, чтобы удалить «где в» п ... Как я могу найти лучший синтаксис запроса производительности пожалуйста?

ответ

0
SELECT DISTINCT p.* 
FROM posts p 
JOIN abos a 
ON p.userid = a.blogid OR p.userid = 11 
LEFT JOIN posts_denied r 
ON r.post_id = p.id AND r.userid = 11 
WHERE (a.userid = 11 OR p.userid = 11) 
    AND r.post_id IS NULL 
ORDER BY p.id DESC 
LIMIT 5 
+0

Thanks Steve. Является ли «отличная» статья для выступлений? Таблицы будут огромными ... – Recif

+0

'DISTINCT' на случай, если' JOIN's вывести несколько совпадений - с использованием 'EXISTS' или' NOT EXISTS' не страдает этой проблемой. –

+0

И это невозможно построить, если оно не существует или существует? Будет ли у него лучшие выступления? – Recif

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