2013-04-10 118 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' – 2013-04-10 19:55:36

回答

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 2013-04-10 19:52:12

+2

条件可以简化为't.id NOT IN(SELECT s.title FROM subscriptions s WHERE s.user = 2)'假设's.title'是'NOT NULL' – 2013-04-10 19:54:20