2013-04-10 3 views
0

У меня есть следующий запрос, который дает мне точные результаты:Результаты запроса не точны

SELECT t.id 
    FROM titles t 
ORDER BY t.id 

Мои результаты:

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 

Мой второй запрос также предоставляет мне точные результаты:

SELECT t.id 
FROM titles t 
    JOIN subscriptions s 
     ON t.id = s.title 
WHERE s.user=2 

Результаты:

10 
11 
14 

Так что я пытаюсь сделать, это получить все результаты первого запроса, которые не показывают во втором запросе, так что я запускаю это:

SELECT t.id 
    FROM titles t 
ORDER BY t.id NOT IN 
(
SELECT t.id 
FROM titles t 
    JOIN subscriptions s 
     ON t.id = s.title 
WHERE s.user=2 
); 

Но мои результаты в конечном итоге, как это:

14 
11 
10 
13 
12 
9 
8 
7 
6 
5 
4 
3 
2 
1 

Что я здесь делаю неправильно? Почему в моем втором запросе отменяется порядок?

+0

Порядок не переворачиваются. Обратите внимание на первые 3 строки: '14,11,10' –

ответ

5

NOT IN должен быть частью WHERE состояния, не ORDER BY заявления:

SELECT 
    t.id 
FROM 
    titles t 
WHERE 
    t.id NOT IN 
    (
     SELECT t.id 
     FROM titles t 
      JOIN subscriptions s 
       ON t.id = s.title 
     WHERE s.user=2 
    ) 
ORDER BY 
    t.id 
+0

Ничего себе, что было рекордным для быстрого ответа. Благодаря! – JimRomeFan

+2

Условие может быть упрощено до 't.id NOT IN (SELECT s.title FROM subscriptions s WHERE s.user = 2)' предполагается, что 's.title' является' NOT NULL' –

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