Android sqlite DB奇怪的行为

Android sqlite DB奇怪的行为,android,sqlite,Android,Sqlite,我正在sqllite浏览器中运行一个查询,该查询将给出精确的输出 但是当我通过Android的SqlLiteDatabase的rawQuery函数运行查询时,它会为每个原始行返回3行 该项质询是— select s.shout_id, u.user_id, u.image_id , u.firstname, u.lastname, s.shout_msg , i.user_id 'r_user_id' , i.image_id 'r_img_id', i.firstname 'r_firs

我正在sqllite浏览器中运行一个查询,该查询将给出精确的输出

但是当我通过Android的SqlLiteDatabase的rawQuery函数运行查询时,它会为每个原始行返回3行

该项质询是—

   select s.shout_id, u.user_id, u.image_id , u.firstname, u.lastname, s.shout_msg , i.user_id 'r_user_id' , i.image_id 'r_img_id', i.firstname 'r_firstname', i.lastname 'r_lastname', s.rec_time from shouts s left join users u 
            on s.user_id = u.user_id left join users i on s.reciever_id = i.user_id
            where ((s.user_id =1 and s.reciever_id =2) or (s.user_id =2 and s.reciever_id =1) ) and s.shout_id < 5  order by s.shout_id desc limit 20;
选择s.shout\u id、u.user\u id、u.image\u id、u.firstname、u.lastname、s.shout\u msg、i.user\u id'r\u user\u id',i.image\u id'r\u img\u id',i.firstname'r\u firstname',i.lastname'r\u lastname',s.rec shouts离开加入用户u的时间
在s.user\u id=u.user\u id左侧加入s.receiver\u id=i.user\u id上的用户i
式中((s.user_id=1和s.reciever_id=2)或(s.user_id=2和s.reciever_id=1))和s.shout_id<5,由s.shout_id描述限制20;
android中的原始查询代码-

public Cursor get_friend_shouts_less(String myid, String friend_id, long shout_id) {
    open();
    Log.d("ListView1", "get less Message myid friend_id shout_id: " + myid + " " + friend_id + " " + shout_id );
    Cursor c = db.rawQuery("select s.shout_id, u.user_id, u.image_id , u.firstname, u.lastname, s.shout_msg , i.user_id 'r_user_id' , i.image_id 'r_img_id', i.firstname 'r_firstname', i.lastname 'r_lastname', s.rec_time from shouts s left join users u " +
            "on s.user_id = u.user_id left join users i on s.reciever_id = i.user_id" +
            " where ((s.user_id =? and s.reciever_id =?) or (s.user_id =? and s.reciever_id =?) ) and s.shout_id < ? order by s.shout_id desc limit 60;", new String[]{myid, friend_id, friend_id, myid , String.valueOf(shout_id)});
    return c;
}
public Cursor get\u friend\u shout\u less(字符串myid、字符串friend\u id、long shout\u id){
open();
Log.d(“ListView1”,“获取较少消息myid friend\u id shout\u id:”+myid+“”+friend\u id+“”+shout\u id);
光标c=db.rawQuery(“选择s.shout\u id、u.user\u id、u.image\u id、u.firstname、u.lastname、s.shout\u msg、i.user\u id‘r\u user\u id’、i.image\u id‘r\u img\u id’、i.firstname‘r\u lastname’、s.rec\u shouts离开加入用户u的时间”+
“在s.user\u id=u.user\u id左侧加入s.receiver\u id=i.user\u id上的用户i”+
其中((s.user_id=?和s.receiver_id=?)或(s.user_id=?和s.receiver_id=?)和s.shout_id<?按s.shout_id desc limit 60排序;”,新字符串[]{myid,friend_id,friend_id,myid,String.valueOf(shout_id)});
返回c;
}

很高兴它成功了,现在我的官方答案是:


SQL左连接操作相当于karthesian产品AxB,这可能导致具有相同内容的行。在“简单”中:使用GROUP BY合并那些相同的行。

您是否尝试按id分组?谢谢@Rüdiger解决了这个问题。这取决于实现引擎,在“sqlite浏览器”中没有GROUP BY的情况下工作