Android SQL查询错误-我做错了什么?
下面是我正在尝试执行的SQL更新:Android SQL查询错误-我做错了什么?,android,sql,sqlite,Android,Sql,Sqlite,下面是我正在尝试执行的SQL更新: UPDATE T SET T.CurrentStopNumber = TS.CurrentStopNumber FROM Trip T INNER JOIN (SELECT TripId, MIN(StopNumber) CurrentStopNumber FROM TripStop WHERE TripId = '106504' AND (IsPickup = 1 OR
UPDATE T
SET T.CurrentStopNumber = TS.CurrentStopNumber
FROM Trip T
INNER JOIN (SELECT TripId, MIN(StopNumber) CurrentStopNumber
FROM TripStop
WHERE TripId = '106504'
AND (IsPickup = 1 OR IsDrop = 1)
AND StopNumber > (SELECT COALESCE(max(StopNumber), 0)
FROM TripUpdate
WHERE TripId = '106504'
AND Type = 2)) TS ON T.TripId = TS.TripId
我在第二行遇到错误:
/* Error message: SQL script is wrong mismatched input . expecting "EQ" */
我熟悉SQL Server,我相信它可以在SQL Server上正常运行。子查询运行良好,并按预期返回1行。我只需要用这个值更新表。怎么了?我认为您不应该为设置的字段指定表,因为数据库已经知道要更新哪个表:
SET CurrentStopNumber = TS.CurrentStopNumber
IIRC,这在SQL Server中也是不允许的。使用:
UPDATE TRIP
SET currentstopnumber = (SELECT MIN(ts.stopnumber)
FROM TRIPSTOP ts
WHERE ts.tripid = TRIP.tripid
AND ts.tripid = '106504'
AND 1 IN (ts.ispickup, ts.isdrop)
AND ts.stopnumber > (SELECT COALESCE(MAX(tu.stopnumber), 0)
FROM TRIPUPDATE tu
WHERE tu.tripid = ts.tripid
AND tu.type = 2)
GROUP BY ts.tripid)
WHERE EXISTS (SELECT NULL
FROM TRIPSTOP ts
WHERE ts.tripid = TRIP.tripid
AND ts.tripid = '106504'
AND 1 IN (ts.ispickup, ts.isdrop)
AND ts.stopnumber > (SELECT COALESCE(MAX(tu.stopnumber), 0)
FROM TRIPUPDATE tu
WHERE tu.tripid = ts.tripid
AND tu.type = 2))
JOIN更可取,但语法不受广泛支持。它在SQL Server中工作,现在即使我删除了它也不工作。似乎JOIN不受支持。我按照你的建议做了,只是修改了WHERE部分:UPDATE Trip SET currentstopnumber=SELECT MINStopNumber FROM TripStop,其中TripId='106504'和IsPickup=1或IsDrop=1,StopNumber>SELECT COALESCEmaxStopNumber,0 FROM TripUpdate,其中TripId='106504',Type=2,其中TripId='106504'