今天我遇到了一个问题,下面的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中没有。
任何人都能解释一下......
答案 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
。你可能想通过其他列查找?)