2013-06-18 23 views
0

好吧,我有源這樣如何從多個表中合併一些記錄後找出表名?

public List<SearchRecord> getResult() { 
     List<SearchRecord> searchResult = new ArrayList<SearchRecord>(); 
     String query = "SELECT " + A + ", " + B+ ", " + C 
       + " FROM " + TABLE_A+ " UNION ALL SELECT " + A+ ", " 
       + B+ ", " + C+ " FROM " + TABLE_B    + " UNION ALL SELECT " + A+ ", " + B+ ", " 
       + C+ " FROM " + TABLE_C + " UNION ALL SELECT " 
       + A+ ", " + B+ ", " + C+ " FROM " 
       + TABLE_D; 
     Cursor cursor = mDatabase.rawQuery(query, null); 
     if (cursor != null) { 
      cursor.moveToFirst(); 
      do { 
       SearchRecord sr = new SearchRecord(); 
       sr.setRecordA(cursor.getString(0)); 
       sr.setRecordB(cursor.getString(1)); 
       sr.setRecordC(cursor.getString(2)); 
       searchResult.add(sr); 
      } while (cursor.moveToNext()); 
      return searchResult; 
     } 
     return null; 
    } 

與此代碼我可以從誰擁有相同的列名稱的多個表中的一些記錄,並把結果保存在一個List對象。但如何找出該記錄屬於哪張表?它來自TABLE_A,TABLE_B,TABLE_C或其他

+0

沒有辦法知道。你可以通過索引來獲取它,因爲結果的列是按照你的陳述建立的。 – darijan

+0

作爲一個不相關的建議,我建議你看一下PreparedStatements,因爲它們會顯着清理你的代碼。 http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html – chamakits

回答

1

按照SQL,否,您要加入3組行並以相同的方式操作它們,每個記錄都不能通過其來源區分。

當然,你可以不喜歡

String query = "SELECT 'TABLE_A', " + A + ", " + B+ ", " + C 
      + " FROM " + TABLE_A+ " UNION ALL SELECT 'TABLE_B' " + A+ ", " 
      + B+ ", " + C+ " FROM " + TABLE_B 
      + " UNION ALL SELECT 'TABLE_C', " + A+ ", " + B+ ", " 
      + C+ " FROM " + TABLE_C + " UNION ALL SELECT 'TABLE_D', " 
      + A+ ", " + B+ ", " + C+ " FROM " 
      + TABLE_D; 

:-)

+0

你還需要調整你的引用,你在哪裏填充SearchRecord - sr.setRecordA(遊標。 getString(1)) - 因爲getString(0)是表的名稱。 – GregHNZ

+0

謝謝你Sjuan76,它的工作原理.. :))是的,你是對的格雷恩霍茲 –

相關問題