#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 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 строку, как я и ожидал. Мне просто нужно обновить таблицу этим значением. Что не так?
Ответ №1:
Использовать:
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))
ОБЪЕДИНЕНИЕ предпочтительнее, но синтаксис широко не поддерживается.
Комментарии:
1. Похоже, соединение не поддерживается. Я сделал это, как вы предложили, за исключением того, что я изменил часть WHERE: ОБНОВИТЬ Trip SET currentstopnumber = (ВЫБЕРИТЕ MIN (StopNumber) ИЗ TripStop, ГДЕ tripID = ‘106504’ И (IsPickup = 1 ИЛИ IsDrop = 1) И StopNumber > (ВЫБЕРИТЕ COALESCE (max (StopNumber), 0) ИЗ TripUpdate, ГДЕ tripID = ‘106504’ И Type = 2) ) ГДЕ tripID = ‘106504’
Ответ №2:
Я не думаю, что вам следует указывать таблицу для заданных вами полей, поскольку база данных уже знает, какую таблицу обновлять:
SET CurrentStopNumber = TS.CurrentStopNumber
(IIRC, это также не разрешено в SQL Server.)
Комментарии:
1. Это работает в SQL Server и сейчас не работает, даже если я удалил его.