将列别名分配给where条件在sqlite中不起作用

时间:2013-09-06 12:19:44

标签: mysql sql sqlite

今天我遇到了一个问题,下面的sql查询在sqlite中不起作用,但在mysql中工作。

它在mysql和sqlite

中具有相同的表结构
Table structure
========================

tablet_order |  framework_item_id | framework_parent_id

1            |           1        |            0

2            |           2        |            1

3            |           3        |            2

SQL:

SELECT tablet_order AS tablet, (

SELECT framework_item_id
FROM framework
WHERE tablet_order = tablet
) AS tablet1
FROM framework
WHERE framework_item_id =1

将别名“平板电脑”分配给tablet_order字段。这在sqlite中产生了错误,但在mysql中没有。

任何人都能解释一下......

1 个答案:

答案 0 :(得分:2)

SQL标准说你不能在同一个SELECT子句中的其他表达式中使用列别名,而SQLite正确地实现了这一点。

为了能够区分两个不同的tablet_order值,您必须至少为其中一个表提供一个表别名:

SELECT tablet_order AS tablet,
       (SELECT framework_item_id
        FROM framework AS f2
        WHERE f2.tablet_order = framework.tablet_order
       ) AS tablet1
FROM framework
WHERE framework_item_id = 1

(子查询没有意义,因为你可以直接使用framework_item_id。你可能想通过其他列查找?)