MySQL在子查询中使用别名

时间:2013-03-13 13:46:09

标签: mysql sql subquery

有这个查询:

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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

答案 2 :(得分: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