You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite附加数据库中使用db.table.*查询报错是否为Bug?

SQLite中db.table.*语法报错的问题分析

我在SQLite中执行以下语句附加内存数据库:

ATTACH DATABASE 'file::memory:?cache=shared' AS backend

遇到了语法规则的不一致问题:

  • 使用SELECT db.table.* FROM db.table会触发语法错误
  • 显式列出所有列的语句SELECT db.table.col1, db.table.col2 FROM db.table可以正常执行
  • 使用SELECT table.* FROM db.table也能正常执行

查看SQLite的语法定义可知,result-column语法仅支持table-name.*格式,不支持db-name.table-name.*的写法。这种情况不属于SQLite的Bug,而是其语法规范的明确限制。

以下是PHP测试代码,可复现该问题:

$db = new PDO('sqlite::memory:');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$db->exec("ATTACH DATABASE 'file::memory:?cache=shared' AS backend");

$db->exec("CREATE TABLE users (user_id INTEGER PRIMARY KEY, name TEXT)");
$db->exec("INSERT INTO users (user_id, name) VALUES (1, 'Alice'), (2, 'Bob')");

$db->exec("CREATE TABLE backend.posts (post_id INTEGER PRIMARY KEY, text TEXT)");
$db->exec("INSERT INTO backend.posts (post_id, text) VALUES (1, 'Lorem'), (2, 'Ipsum')");

// 正常执行
$query = "SELECT posts.* FROM backend.posts";
dump($db->query($query)->fetchAll(PDO::FETCH_ASSOC));

// 正常执行
$query = "SELECT backend.posts.post_id, backend.posts.text FROM backend.posts";
dump($db->query($query)->fetchAll(PDO::FETCH_ASSOC));

// 报错:General error: 1 near "*": syntax error
$query = "SELECT backend.posts.* FROM backend.posts";
dump($db->query($query)->fetchAll(PDO::FETCH_ASSOC));

内容的提问来源于stack exchange,提问作者Vertex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:25:03