SELECT语句,用于从ROWID引用的多个表中进行选择

时间:2016-01-28 12:58:59

标签: sql sqlite

我有一个由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命令相同,那就更好了,只需要附加的"过滤"应用

1 个答案:

答案 0 :(得分:0)

你真的应该在你的表中添加一个正确的INTEGER PRIMARY KEY列。 (隐式rowid可能会被VACUUM更改。)

无论如何,此查询失败,因为列名rowid不明确。将其替换为pj.rowid(或您要访问的任何表格)。