SQLITE CREATE VIEW 与 JOIN 的语法问题
SQLITE CREATE VIEW Syntax issues with JOIN
当我尝试将 3 个表连接在一起时,在 CREATE VIEW with JOIN 中遇到了一些麻烦,我可以做 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 + "));");
这是我正在使用的 CREATE VIEW,它仅适用于 Terms 或 Status 中的一个,但当我尝试同时使用两者时却不行,所以我假设我在该区域做错了。
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 中注入的变量是安全的,可以避免注入。
当我尝试将 3 个表连接在一起时,在 CREATE VIEW with JOIN 中遇到了一些麻烦,我可以做 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 + "));");
这是我正在使用的 CREATE VIEW,它仅适用于 Terms 或 Status 中的一个,但当我尝试同时使用两者时却不行,所以我假设我在该区域做错了。
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 中注入的变量是安全的,可以避免注入。