2016-04-20 4 views
0

Я создал две таблицы с внешним ключом. Вставка данных прошла успешно, но когда я использую инструкцию SELECT, данные не отображаются. Код ниже.Почему мой оператор Select не возвращает данные?

public static final String CREATE_TABLE_BLOCK_LIST = "CREATE TABLE " + TABLE_BLOCK_LIST 
      + "(" + ID_BLOCK_LIST + " INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 0," 
      + ORIGINATING_ADDRESS + " TEXT)"; 

public static final String CREATE_TABLE_BLOCKED_SMS = "CREATE TABLE " + TABLE_BLOCKED_SMS 
      + "(" + ID_BLOCKED_SMS + " INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 0, " 
      + MESSAGE_BODY + " TEXT," 
      + FK_ID_BLOCK_LIST + " INTEGER," + 
      "FOREIGN KEY(" + FK_ID_BLOCK_LIST + ") REFERENCES " + TABLE_BLOCK_LIST + "(" + ID_BLOCK_LIST +"))"; 

ЗЕЬЕСТ

SQLiteDatabase db = this.getWritableDatabase(); 
      //cursor = db.rawQuery("SELECT * FROM " + TABLE_BLOCKED_SMS, null); 
      cursor = db.rawQuery("SELECT * FROM table_block_list " + 
        "JOIN table_blocked_sms " + 
        "ON table_block_list.id_block_list = table_blocked_sms.id_blocked_sms" , null); 

Просьба направить меня, где проблема.

ответ

0

Ваше соединение неявно INNER JOIN.

Если ваша первая таблица имеет данные, а вторая - нет, INNER JOIN не будет возвращать данные.

Что вам нужно сделать, это использовать LEFT OUTER JOIN

SELECT * FROM table_block_list 
    LEFT OUTER JOIN table_blocked_sms 
     ON table_blocked_sms.id_blocked_sms = table_block_list.id_block_list 
+0

большое спасибо его работы –

+0

жаль, что я изменил код согласно моему требованию. теперь снова его не работает курсор = db.rawQuery («SELECT * FROM table_block_list» + «LEFT OUTER JOIN table_blocked_sms» + «ON table_block_list.id_block_list = table_blocked_sms.fk_id_block_list», null); пожалуйста, помогите @ yk11 –

+0

Что вы вернетесь? нет результатов? код ошибки? Можете ли вы начать с того, что обе таблицы имеют данные и используют внутреннее соединение? – yk11

Смежные вопросы