2010-10-10 90 views
1

此查詢:的MS Access/SQL Server的語法(我猜)

SELECT sentmails.[VersandDatum], 
     sentmails.[DatumMailGeplant], 
     mailintervals.[Interval], 
     definitions.[Subject], 
     users.[Name], 
     sentmails.[MailArt], 
     Objekte.[Name], 
     sentmails.[Erledigt], 
     sentmails.[ID] 
    FROM Objekte 
RIGHT JOIN (users RIGHT JOIN (definitions RIGHT JOIN (mailintervals RIGHT JOIN (sentmails) ON mailintervals.ID=sentmails.Intervall) ON definitions.ID=sentmails.Noti_ID) ON users.UID=sentmails.Funktion) ON Objekte.OId=sentmails.Objekt_ID 

...作品在MS Access QBE罰款,但在SQL Server,它返回一個 「不正確的語法附近 ')'」 的錯誤。我真的想知道爲什麼:

  • 連接需要在括號內?
  • 沒有更多的外部連接在SQL Server?
  • 需要更多括號嗎?

回答

1

您的JOIN語法不正確。您應該單獨加入每個表格,而無需嵌套括號。你可能想要類似的東西:

SELECT sentmails.[VersandDatum] 
    , sentmails.[DatumMailGeplant] 
    , mailintervals.[Interval] 
    , definitions.[Subject] 
    , users.[Name] 
    , sentmails.[MailArt] 
    , Objekte.[Name] 
    , sentmails.[Erledigt] 
    , sentmails.[ID] 
FROM Objekte 
RIGHT JOIN sentmails ON Objekte.OId = sentmails.Objekt_ID 
RIGHT JOIN users ON users.UID = sentmails.Funktion 
RIGHT JOIN definitions ON definitions.ID = sentmails.Noti_ID 
RIGHT JOIN mailintervals ON mailintervals.ID = sentmails.Intervall 

Here's a starting point in MSDN

1

MS Access有一個稍微不同的JOIN語法。使用這個來代替:

SELECT 
    sentmails.[VersandDatum], 
    sentmails.[DatumMailGeplant], 
    mailintervals.[Interval], 
    definitions.[Subject], 
    users.[Name], 
    sentmails.[MailArt], 
    Objekte.[Name], 
    sentmails.[Erledigt], 
    sentmails.[ID] 
FROM Objekte 
RIGHT JOIN sentmails ON Objekte.OId=sentmails.Objekt_ID 
RIGHT JOIN definitions definitions.ID=sentmails.Noti_ID 
RIGHT JOIN mailintervals ON mailintervals.ID=sentmails.Intervall 
RIGHT JOIN users ON users.UID=sentmails.Funktion 
+0

毫無疑問.... – Stefan 2010-10-10 13:48:40

+0

只是想sqlstr.Replace( 「RIGHT JOIN」, 「RIGHT OUTER JOIN」)更換( 「(」, 「」).Replace(」。 )「,」「) 它似乎更好地吸氣 – Stefan 2010-10-10 13:49:23