0

今天我遇到了一个问题,下面的 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' 被分配给 tablet_order 字段。这在 sqlite 中出错,但在 mysql 中没有。

任何人都可以解释一下这个......

4

1 回答 1

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。您可能想通过其他列查找?)

于 2013-09-06T12:33:11.423 回答