2013-03-13 98 views
0

有這個查詢中使用別名:MySQL的子查詢

SELECT 
    gs.PAGE, 
    gs.ID, 
    gs.CATALOGID 
FROM pages gs 
WHERE gs.ID = 404 
    OR gs.ID = (SELECT 
      gs2.ID 
     FROM pages gs2 
     WHERE gs2.CATALOGID = gs.CATALOGID 
      AND gs2.PAGE = gs.PAGE + 1); 

應該給我:

PAGE | ID | CATALOGID 
2 | 404 | 7 
3 | 403 | 7 

但它僅返回ID爲404 該問題的頁面似乎是別名那裏。

我得到了一個頁面的ID,需要獲取正確的頁面,並添加到pageno +1。

最新問題?

編輯:

樣本數據:

PAGE ID CATALOGID 
1 291 7 
2 404 7 
3 403 7 
4 450 7 
5 455 7 
+0

什麼是你想在裏面做什麼? – 2013-03-13 14:12:34

+0

我不明白你的查詢應該完成什麼。 – Kermit 2013-03-13 14:12:45

回答

1

試試這個:

SELECT 
    gs.PAGE, 
    gs.ID, 
    gs.CATALOGID 
FROM pages gs 
WHERE gs.ID = 404 
    OR gs.PAGE = (SELECT PAGE + 1 
        FROM pages x 
        where x.id = 404 
        and gs.CATALOGID = x.CATALOGID); 

SQL DEMO

+0

如果PAGE + 1丟失或從表中刪除,這將不會做什麼OP wnats – 2013-03-13 14:16:18

+0

@raheelshan,你是什麼意思丟失,如果它丟失,那麼它返回正確的數據,即只有404行。 – 2013-03-13 14:19:52

+0

這隻適用於在gs.ID上添加DISTINCT。你能證實嗎? – frgtv10 2013-03-13 14:21:56

2
SELECT * 
FROM pages gs 
WHERE gs.PAGE = 
(SELECT gs2.PAGE FROM pages gs2 
WHERE gs2.CATALOGID=gs.CATALOGID AND gs2.ID = 404) + 1 
OR gs.ID = 404; 
+0

就是這樣!謝謝。 – frgtv10 2013-03-13 14:21:05

+0

@ frgtv10,我的回答完全一樣,唯一不同的是我在做+ 1裏面的子查詢 – 2013-03-13 14:22:02

0
SELECT 
    gs.PAGE, 
    gs.ID, 
    gs.CATALOGID 
FROM pages gs 
WHERE gs.PAGE >= (SELECT 
     gs2.PAGE 
      FROM pages gs2 
      WHERE gs2.ID = 404) 
LIMIT 2; 

SQL FIDDLE DEMO

輸出

PAGE ID CATALOGID 
---------------------- 
2  404  7 
3  403  7 
+0

只返回ID 404. – frgtv10 2013-03-13 14:18:01

+0

@ frgtv10查看編輯過的查詢 – 2013-03-13 14:28:54