簡體   English   中英

Android Sqlite內部聯接不起作用

[英]Android Sqlite inner join doesn't work

我正在嘗試在Sqlite上的2個表之間進行內部連接

這是我的內部聯接的代碼:

public PicoEvent getEvent(String eventCode)
{
    //Get the readable database instance
    SQLiteDatabase db = getReadableDatabase();      
    //create string for user table inner join
    String userTable1 = UsersTable.TABLE_NAME + "1";
    String userTable2 = UsersTable.TABLE_NAME + "2";
    //create query for getting the event's details
    String sql1 = "Select * From " + EventsTable.TABLE_NAME
    //set the user tables once as users1 and once as users2 in the inner join process
    + " Inner Join " + UsersTable.TABLE_NAME + " As " + userTable1 + " On "
    + userTable1 + "." + UsersTable.USER_ID + " = " + EventsTable.TABLE_NAME + "." + EventsTable.SIGNED_IN_USER_ID
    + " Inner Join " + UsersTable.TABLE_NAME + " As " + userTable2 + " On "
    + userTable2 + "." + UsersTable.USER_ID + " = " + EventsTable.TABLE_NAME + "." + EventsTable.OWNER_USER_ID 
    + " Where " + EventsTable.TABLE_NAME + "." + EventsTable.EVENT_CODE + " = ?";               

    //selection arguments
    String[] selectionArgs = new String[] {eventCode}; 

    //Get the cursor for event's details query
    Cursor cursor = db.rawQuery(sql1, selectionArgs);
    Log.d("query", sql1.replace("?", eventCode));
    Log.d("cursor", String.valueOf(cursor.getCount()));
}

它創建此查詢:

Select * From Events 
Inner Join Users As Users1 On Users1.User_Id = Events.Signed_In_User_Id 
Inner Join Users As Users2 On Users2.User_Id = Events.Owner_User_Id 
Where Events.Event_Code = 10231009

光標總是返回0結果...

當我放棄內連接時 - 我得到了事件的光標..

有任何想法嗎 ?

更新 -添加了創建語句

/**
 * Get the query to create the Users table
 * @return the query for the creation of the table ready to be executed
 */
private String getCreateUsersTableQuery()
{
    //Create the create query string
    String createQuery = "Create Table If Not Exists " + UsersTable.TABLE_NAME + "("
            + UsersTable.USER_ID + " Varchar(50) Primary Key Not Null,"
            + UsersTable.NAME + " Varchar(50) Not Null,"
            + UsersTable.FIRST_NAME + " Varchar(50),"
            + UsersTable.PROFILE_PICTURE + " Blob"
            + ")";
    return createQuery; 
}

給我創建查詢:

Create Table If Not Exists Users(
     User_Id Varchar(50) Primary Key Not Null,
     Name Varchar(50) Not Null,
     First_Name Varchar(50),
     Profile_Picture Blob)


/**
 * Get the query to create the Events table
 * @return the query for the creation of the table ready to be executed
 */
private String getCreateEventsTableQuery()
{
    //Create the create query string
    String createQuery = "Create Table If Not Exists " + EventsTable.TABLE_NAME + "("
            + EventsTable.EVENT_CODE + " Varchar(50)Not Null,"
            + EventsTable.SIGNED_IN_USER_ID + " Varchar(50)Not Null,"
            + EventsTable.NAME + " Varchar(50) Not Null,"
            + EventsTable.PLACE + " Varchar(100),"
            + EventsTable.START_TIME + " Integer Not Null,"
            + EventsTable.END_TIME + " Integer Not Null,"    
            + EventsTable.OWNER_USER_ID + " Varchar(50) Not Null,"
            + EventsTable.IS_SHARING_PICTURES + " Integer Default 1 Not Null,"
            + EventsTable.IS_ASK_BEFORE_SHARING + " Integer  Default 1 Not Null,"
            + "Primary Key(" + EventsTable.EVENT_CODE + "," + EventsTable.SIGNED_IN_USER_ID + "),"
            + "FOREIGN KEY(" + EventsTable.SIGNED_IN_USER_ID + ") REFERENCES " + UsersTable.TABLE_NAME + "(" + UsersTable.USER_ID + "),"
            + "FOREIGN KEY(" + EventsTable.OWNER_USER_ID + ") REFERENCES " + UsersTable.TABLE_NAME + "(" + UsersTable.USER_ID + ")"
            + ");";
    return createQuery;
}

給我查詢:

 Create Table If Not Exists Events(
     Event_Code Varchar(50)Not Null,
     Signed_In_User_Id Varchar(50)Not Null,
     Name Varchar(50) Not Null,Place Varchar(100),
     Start_Time Integer Not Null,
     End_Time Integer Not Null,
     Owner_User_Id Varchar(50) Not Null,
     Is_Sharing_Pictures Integer Default 1 Not Null,
     Is_Ask_Before_Share Integer  Default 1 Not Null,
     Primary Key(Event_Code,Signed_In_User_Id),
     FOREIGN KEY(Signed_In_User_Id) REFERENCES Users(User_Id),
     FOREIGN KEY(Owner_User_Id) REFERENCES Users(User_Id));

我正在嘗試在事件Owner_User_Id和Signed_In_User_Id之間使用來自Users表的匹配用戶根據其ID進行內部聯接

我希望你仍然可以使用答案。 事實證明使用AS不起作用。 我自己使用了一些內部連接,只有當我完全省略AS它們才能工作。

"Inner Join " + UsersTable.TABLE_NAME + " " + userTable1...

所以這應該成功,至少對我而言:

Select * From Events 
Inner Join Users Users1 On Users1.User_Id = Events.Signed_In_User_Id 
Inner Join Users Users2 On Users2.User_Id = Events.Owner_User_Id 
Where Events.Event_Code = 10231009

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM