如何使用这些表中的2个不同字段正确执行JOIN 2表的查询?

时间:2016-03-07 10:10:27

标签: mysql sql join inner-join

我是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

有什么问题?我错过了什么?我该如何解决这个问题?

1 个答案:

答案 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)。