android - SQLITE CREATE VIEW JOIN 的语法问题

标签 android mysql sqlite syntax

当我尝试将 3 个表连接在一起时,在使用 JOIN 创建 View 时遇到了一些麻烦,我可以做 2 个表,但 3 个表对我来说似乎不行。我对此很陌生,所以我只是通过反复试验,因为我浏览过的大多数文档并没有真正涵盖(据我所知)连接 3 个表,而且进展并不顺利,所以我在这里一些建议并希望有一个解决方案。提前致谢。

以下是表格:

条款

db.execSQL("CREATE TABLE " + termsTable + " (" + colTermsID + " INTEGER PRIMARY KEY , " + colTermsClass + " TEXT)");

状态

  db.execSQL("CREATE TABLE " + statTable + " (" + colStatusID + " INTEGER PRIMARY KEY , " + colStatClass + " TEXT)");

账户

db.execSQL("CREATE TABLE " + accountsTable + " (" + colID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            colName + " TEXT, " +
            colAmount + " Integer, " +
            colPurpose + " TEXT, " +
            colTerms +" INTEGER NOT NULL, " +
            colStatus +" INTEGER DEFAULT '1'," +
            colDate + " TEXT, " +
            "FOREIGN KEY (" + colTerms + ") REFERENCES " + termsTable + " (" + colTermsID + ") " + "," +
            "FOREIGN KEY (" + colStatus + ") REFERENCES " + statTable + " (" + colStatusID + "));");

这是我正在使用的创建 View ,它仅适用于条款或状态之一,但当我尝试使用两者时则不然,所以我认为我在该领域做错了什么。

    db.execSQL("CREATE VIEW " + viewAccs +
                    " AS SELECT " + accountsTable + "." + colID + " AS _id," +
                    " " + accountsTable + "." + colName + "," +
                    " " + accountsTable + "." + colAmount + "," +
                    " " + accountsTable + "." + colPurpose + "," +
                    " " + termsTable + "." + colTermsClass + "" +
                    " FROM " + accountsTable + " JOIN " + termsTable + " ON " + accountsTable + "." + colTerms + " = " + termsTable + "." + colTermsID +
                    " " + statTable + "." + colStatClass + "" +
                    " FROM " + accountsTable+ " JOIN " + statTable + " ON " + accountsTable + "." + colStatus + " = " + statTable + "." + colStatusID +
                    " " + accountsTable + "." + colDate
    );

编辑(在此回答):

这是我在修复语法并遵循 X.L Ant 提到的内容后最终得到的实际代码,供将来引用。

            db.execSQL("CREATE VIEW " + viewAccs +
                    " AS SELECT " + accountsTable + "." + colID + " AS _id," +
                    " " + accountsTable + "." + colName + "," +
                    " " + accountsTable + "." + colAmount + "," +
                    " " + accountsTable + "." + colPurpose + "," +
                    " " + termsTable + "." + colTermsClass + "," +
                    " " + statTable + "." + colStatClass + "," +
                    " " + accountsTable + "." + colDate + "" +
                    " FROM " + accountsTable +
                    " JOIN " + termsTable + " ON " + accountsTable + "." + colTerms + " = " + termsTable + "." + colTermsID +
                    " JOIN " + statTable + " ON " + accountsTable + "." + colStatus + " = " + statTable + "." + colStatusID
    );

最佳答案

一个查询中不能有两个 FROM

试试这个:

db.execSQL("CREATE VIEW " + viewAccs +
                " AS SELECT " + accountsTable + "." + colID + " AS _id," +
                " " + accountsTable + "." + colName + "," +
                " " + accountsTable + "." + colAmount + "," +
                " " + accountsTable + "." + colPurpose + "," +
                " " + termsTable + "." + colTermsClass + "" +
                " FROM " + accountsTable + 
                " JOIN " + termsTable + " ON " + accountsTable + "." + colTerms + " = " + termsTable + "." + colTermsID +
                " " + statTable + "." + colStatClass + "" +
                " JOIN " + statTable + " ON " + accountsTable + "." + colStatus + " = " + statTable + "." + colStatusID +
                " " + accountsTable + "." + colDate

确保您在 SQL 中注入(inject)的变量是安全的,以避免注入(inject)。

关于android - SQLITE CREATE VIEW JOIN 的语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28565517/

相关文章:

java - 在 Glide 中使用 Firebase 存储图像

mySQL 联合计算行

php - 如何在单个 PHP 文件中使用不同的表单?

php - MySQL:获取某一行

python - 使用 Genie 在 SQLite 数据库中创建表?

php - 如果查询没有找到任何匹配项

c++ - 在 C++ 中存储和操作 SQLite 查询的结果

android - onTokenRefresh() 永远不会在第一次安装应用程序时被调用

android - 如何在 Eclipse ADT 中修复我的 AVD?

java - 如何在特定索引处的字符串中添加换行符?