如何使用sqlite android从两个表中检索值?

时间:2016-12-14 13:43:08

标签: android sqlite

我需要从两个表中检索值并在recyclerview中显示它到目前为止我已尝试过连接但结果似乎不像我预期的那样。现在让我详细发布我的问题我有两个表即呼叫和旅行这里的数据如下:

致电表;

PK_ID  INC_ID   DES   CHECKIN  CHECKOUT  FLAG
-----  ------   ---   -------  --------  ----
 1       2      Test  12:20    14:50      1 

旅行表:

PK_ID  INC_ID   LAT   LONG  FLAG
-----  ------   ---   ----  ----
   1     2      11.4  11.5   2

我的预期结果应该是这样的:

Caal_PK_ID    Travel_PK_Id   INC_ID   Checkin  Checkout FLAG  LAT    LONG
----------    ------------   ------   -------  -------- ----  ---    ----
   1                0          2       12:20     14:50   1     null  null 

   0                1          2        null      null   2     11.4  11.5 

如何通过使用联接产生这个想要的结果我得到的结果我不希望我需要这样的结果如何查询这个让我发布我迄今为止尝试的内容

 String visitquery= "SELECT * FROM " + VisitModel.Visit_Table + " ,"  + VisitModel.Visit_TravelTable  + " where "   +VisitModel.Visit_IncidentID + " =  "+  id +  " and " +  VisitModel.Visit_IncidentID  + " = " + id ;

没有得到结果,任何人都可以为此发布解决方案。

3 个答案:

答案 0 :(得分:0)

要执行此操作,您需要尝试加入对于表格,此处我已修改您的查询以使用 INNER JOIN 功能,该功能将返回您想要的结果。< / p>

"SELECT * FROM " + VisitModel.Visit_Table + " as v INNER JOIN"  + VisitModel.Visit_TravelTable  + " as t where "   +v.Visit_IncidentID + " =  "+  id +  " and " +  v.Visit_IncidentID  + " = " + id ;

答案 1 :(得分:0)

你应该编写一个简单的sqlite连接:

private final String MY_QUERY = "SELECT call.PK_ID, 
                                   travel.PK_Id,
                                   call.INC_ID,
                                   travel.INC_ID,
                                   call.CHECKIN,  
                                   call.CHECKOUT,   
                                   call.FLAG,  
                                   travel.FLAG,  
                                   travel.LAT  ,  
                                   travel.LONG 
                                 FROM table_call call
                                 INNER JOIN table_travel travel ON call.INC_ID=travel.INC_ID 
                                 WHERE call.INC_ID =?;
//I used your columns, you can use any column you'd like

db.rawQuery(MY_QUERY, new String[]{String.valueOf(myIncidentId)});

注意:如果要检索所有列,则必须检查光标以正确选择所有行,因此您必须创建模型,或使用相同的光标初始化两个实体。

此查询将返回此行架构:

call.PK_ID    travel.PK_ID   call.INC_ID   travel.INC_ID   call.CHECKIN    call.CHECKOUT    call.FLAG    travel.FLAG    trvel.LAT    travel.LONG
----------    -----------     ----------   -------------   ------------    -------------    ---------    -----------    ---------     -----------
    1             1                2              2             12:20         14:50             1             2            11.4            11.5

希望这有帮助

答案 2 :(得分:0)

在我看来,您不希望加入表(查看您的预期结果),但希望两个表中的每一行都有一个单独的行。在这种情况下,您正在寻找 UNION 查询

试试这个:

SELECT PK_ID AS CALL_PK_ID, Null as TRAVEL_PK_ID,  INC_ID,   CHECKIN,  CHECKOUT,  FLAG, Null as Lat, Null As Long
From VisitModel.Visit_TravelTable
UNION ALL
SELECT NULL AS CALL_PK_ID, PK_ID AS TRAVEL_PK_ID, INC_ID, Null As CHECKIN, NULL AS CHECKOUT, FLAG, Lat, Long
FROM VisitModel.Visit_TravelTable

这应该会返回您的预期结果。