2011-05-12 67 views
0

这里是SQL UPDATE我试图执行: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运行服务器就好了。子查询运行正常,并返回1行,如我所料。我只需要用该值更新表格。哪里不对?

回答

2

用途:

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

似乎不支持连接。我没有像你只是建议我修改WHERE部分: UPDATE旅行 SET currentstopnumber = (SELECT MIN(StopNumber) FROM TripStop WHERE TRIPID = '106504' AND(IsPickup = 1或IsDrop = 1) AND StopNumber>(SELECT COALESCE(max(StopNumber),0)FROM TripUpdate WHERE TripId ='106504'AND Type = 2) ) WHI TripId ='106504' – katit 2011-05-12 02:49:12

0

我不认为你应该指定表中您所设置的字段,数据库已经知道要更新的表:

SET CurrentStopNumber = TS.CurrentStopNumber 

(IIRC,未在SQL Server或者允许。)

+0

它在SQL Server中工作,即使我删除它现在也不起作用。 – katit 2011-05-12 02:42:50