在select语句中苦苦寻找语法错误

时间:2013-08-08 09:16:58

标签: sql sqlite android-sqlite

我的数据库是这样的:

CREATE TABLE IF NOT EXISTS patienttestdetail s(
    ptdid INTEGER PRIMARY KEY AUTOINCREMENT,
    pid INTEGER,
    date TEXT,
    sugarlevel INTEGER, 
    FOREIGN KEY(pid) REFERENCES patientdetails(id))

该脚本创建下表。

ptdid  pid     date      sugarlevel 

1       1    12/05/2013      125
2       2    12/06/2013      325 
3       1    12/41/2012      125 
4       3    08/12/2012      135
5       2    04/05/2012      135 
6       1    05/12/2012      135 

输入我的数据后,我现在想要选择pid = 2的最后一行。

我写了这样的代码:

cursor3=database.rawQuery("SELECT * FROM patienttestdetails WHERE pid="+patientId+" AND ptdid=(+SELECT MAX(ptdid) FROM patienttestdetails+)", null);

在上面的查询中,patientId = 2很好,但会导致运行时异常。

错误:

  

sqlite.SqliteException:near“&”:语法错误:,同时编译:   SELECT * FROM patienttestdetails WHERE pid = 2 AND ptdid =(+ SELECT   MAX(ptdid)FROM patienttestdetails +)

2 个答案:

答案 0 :(得分:0)

不是&&and 以及+ +正在做什么

    cursor3=
           database.rawQuery("SELECT * 
                              FROM patienttestdetails 
                              WHERE pid="+patientId+" and  ptdid in (
                                SELECT distinct MAX(ptdid) 
                                FROM patienttestdetails
                             )", null);

在将查询添加到代码之前,必须首先在sqlite数据库管理器或其他管理器中使用数据库执行它,如果它执行,那么你应该在代码上执行它

详细了解sqlite here

答案 1 :(得分:0)

您应该坚持使用常规编码风格并使用AND代替and,而SQL中也不使用&&

显然,您希望获得最新的行,并使用子选择MAX()进行尝试。

重写您的查询以使用ORDER BYLIMIT

"SELECT *
 FROM patienttestdetails
 WHERE pid=" + patientId + "
 ORDER BY ptdid DESC
 LIMIT 1"

......会更有意义。