考虑以下设置:
CREATE TABLE NAMES(Id integer PRIMARY KEY, Name text);
INSERT INTO NAMES VALUES(1,'Tom');
INSERT INTO NAMES VALUES(2,'Lucy');
INSERT INTO NAMES VALUES(3,'Frank');
CREATE TABLE fields(fid integer, fname text);
INSERT into fields values(1, "Id");
insert into fields values(2, "Name");
SELECT name, (SELECT "Name") FROM NAMES;
最后一条语句会输出
Tom|Tom
Lucy|Lucy
Frank|Frank
然而,尽管select fname from fields where fid=2
产生("Name")
(作为单单元格表),将上述查询中的最后一条语句替换为
SELECT name, (select fname from fields where fid=2) FROM NAMES;
给
Tom|Name
Lucy|Name
Frank|Name
为什么?这是故意的吗?
注意:这已经使用 SQLite v3.20 进行了测试
在 SQL
'single quotes'
中,用于字符串值,而"double quotes"
用于表/列名称。SQLite允许所有类型的引用以与其他数据库兼容,但如果可能,它会首先使用正确的解释。
所以在子查询
(SELECT "Name")
中,它会尝试使用一个名为的列Name
,并且有一个。换句话说,第一个查询被解释为:(子查询仅引用外部查询当前行中的值;这是相关子查询的一个毫无意义的实例。)
SQLite 被设计为嵌入式数据库,可从“真实”编程语言访问,因此它没有内置的动态 SQL 机制。您必须单独进行列名查找: