提问人:Stalkium 提问时间:10/26/2020 最后编辑:Mark RotteveelStalkium 更新时间:10/26/2020 访问量:1268
SQL select where 语句中的未知标记
Unknown token in SQL select where statement
问:
我有三张表:
- 新闻表:ID,名称
- REGIONS 表:ID、NAME
每个“Press”都发布在特定的区域(Regions)中,因此我创建了一个名为“PRESSREGIONS”的子表:
- PRESSREGIONS:ID、名称、IDPRESS
当尝试从与当前 PRESS 相关的 PRESSREGIONS 中选择记录时,我使用:
SELECT * FROM PRESSREGION WHERE PRESSREGION.IDPRESS = PRESS.ID
我有以下错误:
错误 -206 令牌未知 PRESS.ID
我什至尝试使用另一个表和另一个字段,只是为了尝试并得到相同的错误。我的陈述有什么问题吗?
德尔福RIO 10.3 - Firedac - 火鸟 3.0
答:
您需要使用 .JOIN
PRESS
SELECT
pr.*,
p.*
FROM
PRESSREGION AS pr
INNER JOIN PRESS AS p ON pr.IDPRESS = p.ID
评论
你不能使用,因为你没有声明为你要使用的东西。PRESS.id
PRESS
“翻译”到 Delphi,您的查询看起来像有两个文件:
Unit A;
inteface
var AAA: integer;
implementation
end.
然后
Program B;
begin
AAA := 10;
end.
尝试编译程序 - 您会收到相同的错误,未定义变量 AAA,在编译模块 B 时,Delphi 编译器不知道令牌 AAA。除非您显式声明 B 局部变量 AAA 或显式声明您打算从所有现有单元 () 的单元 A 导入 AAA 变量,否则程序不会编译。Program B; uses A; ...
如果编译器不能绝对保证地知道你打算做什么 - 它不能做猜测,也不能通过一些随机估计为你编写程序。
与 SQL 相同,除非您显式声明表 PRESS(可能带有快捷方式/别名)作为您确实打算使用的东西 - 查询编译器不会知道。
阅读第 6.1.3 章。 Firebird 文档中的 FROM 子句。 或者 Martin Gruber 的“Essential SQL”。 或者有很好的 Delphi 3 和 Delphi 5 俄语的初学者书籍,可能还有其他语言。实际上,关于SQL数据库的“广而通用的范围,浅的深度”的初学者书籍可能比非常详细的“窄范围深入”类型的文档更能为你服务。
在选项上显式声明,这将是,在 SQL'89 风格中“隐式连接”方式
SELECT * FROM PRESSREGIONs, Press WHERE PRESSREGIONs.IDPRESS = PRESS.ID
上面引用的 Dai 使用 SQL'92“显式连接”风格的另一种选择是
SELECT * FROM PRESSREGIONs JOIN Press ON PRESSREGIONs.IDPRESS = PRESS.ID
在 https://dbfiddle.uk/?rdbms=firebird_3.0&fiddle=8f32007629284cf0aa30128d5a7b5e10 上查看更多 SQL 命令和 Firebird 对它们的反应
上一个:更改键值后刷新查找字段值
下一个:响应式和粘性顶部菜单冲突
评论
PRESS
PRESS
PRESSREGIONS
PRESSREGION