使用外键从光标中检索SQLite中的数据 - android c#xamarin

时间:2017-12-03 10:14:57

标签: c# android sqlite

我正在尝试使用SQLite运行Cursor查询,但我不确定如何检索我想要的内容。

我的SQL表如下:

db.ExecSQL(@"CREATE TABLE IF NOT EXISTS categories(
                            Id INTEGER PRIMARY KEY AUTOINCREMENT,
                            categoryName TEXT NOT NULL)");

            db.ExecSQL(@"CREATE TABLE IF NOT EXISTS teams(
                            Id INTEGER PRIMARY KEY AUTOINCREMENT,
                            teamName TEXT NOT NULL,
                            cat INTEGER NOT NULL,
                            favINTEGER NOT NULL,
                            FOREIGN KEY(cat) REFERENCES categories(Id))");

以下是我正在尝试运行的查询。我需要显示与团队相关联的类别,但是当我查询并显示查询时,而不是与“1”相关联的类别,而是显示实际数字“1”而不是与之关联的单词。

我的查询如下:

    ICursor c = db.Query("teams", new string[] { "Id", "teamName", "cat", "fav"}, "fav= 0", null, null, null, null);

需要更多代码,请询问。

1 个答案:

答案 0 :(得分:1)

FOREIGN KEY用于定义约束,为了便于检索,它实际上没有定义关系;为此你需要使用JOIN将表合并在一起。

如果使用rawQuery,SELECT将遵循: -

SELECT teams.Id, teams.teamName, teams.cat, teams.fav, categories.Id, categories.categoryName FROM teams JOIN categories ON teams.cat = catagories.Id WHERE fav=0)

然而,使用光标 query (查询C#)方法很难理解 JOIN 应该去哪里,它/它们可以放入表格(第一个)参数

所以: -

ICursor c = db.Query("teams", new string[] { "Id", "teamName", "cat", "fav"}, "fav= 0", null, null, null, null);

可能变为(也改为检索所有列): -

<强> ICursor c = db.Query("teams JOIN categories ON cat= categories.Id", new string[] { "teams.Id AS teamsID", "teams.teamName", "teams.cat", "teams.fav", "categories.Id AS categoriesID", "categories.categoryname"}, "fav= 0", null, null, null, null);

  • 注意!使用AS为Id列使用明确的名称(如果你想通过列名而不是列偏移使用它们,那么它们应该是不同的)more on this here