Ошибка SQL-запроса - что я делаю не так? - PullRequest
0 голосов
/ 12 мая 2011

Вот 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 строку, как я ожидаю.Мне просто нужно обновить таблицу с этим значением.Что не так?

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

Использование:

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))

Соединение является предпочтительным, но синтаксис широко не поддерживается.

0 голосов
/ 12 мая 2011

Я не думаю, что вам следует указывать таблицу для полей, которые вы устанавливаете, поскольку база данных уже знает, какую таблицу обновлять:

SET CurrentStopNumber = TS.CurrentStopNumber

(IIRC, это также запрещено в SQL Server.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...