我是SQL的新手,我在简单查询时遇到以下问题。
我必须执行 JOIN 2个表的查询。连接操作不在单个字段上,但必须在这些表上具有相同名称的2个不同字段上执行。
所以我做了类似的事情:
public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 2;
private static final String DICTIONARY_TABLE_NAME = "logindb";
static SQLiteDatabase db;
private static final String DICTIONARY_TABLE_CREATE =
"CREATE TABLE " + DICTIONARY_TABLE_NAME + "(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,email text,password text);";
DatabaseHandler(Context context) {
super(context, "logindb", null, DATABASE_VERSION);
db = getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DICTIONARY_TABLE_CREATE);
db = this.db;
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void closeDb() {
db.close();
;
}
public static boolean insertEntry(String email, String password) {
ContentValues cv = new ContentValues();
cv.put("email", email);
cv.put("password", password);
Log.e("email", email);
Log.e("pass", password);
long rowsEffected = db.insert(DICTIONARY_TABLE_NAME, null, cv);
return rowsEffected > 0 ? true : false;
}}
但是,执行此查询时,我会忽略以下错误消息:
操作数应包含1列
正如您所看到的,我正在尝试加入这两个表,并且联接基于2个字段,依据:
.war
有什么问题?我错过了什么?我该如何解决这个问题?
答案 0 :(得分:1)
如果要同时使用多个条件,请使用AND
指定其他连接条件:
SELECT count(*)
FROM TID003_ANAGEDIFICIO anagraficaEdificio
JOIN TID002_CANDIDATURA candidatura
ON candidatura.PRG_PAR = anagraficaEdificio.PRG_PAR
AND candidatura.PRG_CAN = anagraficaEdificio.PRG_CAN
WHERE anagraficaEdificio.FLG_GRA = 1;
如果两个表中连接列的列名相同,则可以使用USING
谓词的连接:
JOIN TID002_CANDIDATURA candidatura USING (PRG_PAR, PRG_CAN)
所有数据库都不支持此功能,但它位于MySQL中(有关详细信息,请参阅documentation)。