我有一个由AutoIt访问的小型SQLITE 3数据库。工作得很好,但现在我需要一个更复杂的声明,也许我现在很遗憾我只使用ROWID而不是特定的ID字段来引用表...
这是配置:
Table 1 Person
Name (string)
Initials (string)
Table 2 Projekte
Description (string)
Person (containing the ROWID of table Person)
Table 3 Planungen
ProjID (contains ROWID of table Projekte)
PlID (numeric, main selection identifier)
(plus some other fields that do not matter)
最初,我只需要读取表3 Planungen中由特定PlID过滤的所有数据。我通过使用:
成功地做到了这一点SELECT ROWID,* FROM Planungen WHERE PlID=[FilterValue1] ORDER BY ROWID;
效果很好。
现在,我需要只选择这些记录的子集,其中PlID = [FilterValue1],其中ProjID指向表2 Projekte条目,符合Projekte.Person = [FilterValue2]。所以我甚至不需要表1(人物),只需要2和3。
我以为我可以这样做(现在很明显,我是SQL白痴):
SELECT ROWID,* FROM Planungen p, Projekte pj WHERE pj.Person=[FilterValue2] and p.ProjID=pj.ROWID and p.PlID=[FilterValue1] ORDER BY ROWID;
遇到SQLite错误,告诉我没有这样的列ROWID 。哎呀!真?怎么可能?我不能在WHERE子句中使用ROWID ??好吧,也许它无论如何都不会做我的意图。
有人可以帮帮我吗?这可以在不改变数据库结构和引入ID字段的情况下完成吗?
如果SELECT的输出与第一个有效的SELECT命令相同,那就更好了,只需要附加的"过滤"应用
答案 0 :(得分:0)
你真的应该在你的表中添加一个正确的INTEGER PRIMARY KEY列。 (隐式rowid
可能会被VACUUM更改。)
无论如何,此查询失败,因为列名rowid
不明确。将其替换为pj.rowid
(或您要访问的任何表格)。