2012-03-18 4 views
3

Dans ma base de données, j'ai trois tables:Double jointure interne génère une erreur inattendue

  • utilisateurs: UserID (numérotation automatique), UserName, UserPassword et quelques autres champs sans importance.
  • PrivateMessages: MessageID (numérotation automatique), SenderID et quelques autres champs définissant le contenu du message.
  • MessageStatus: MessageID, ReceiverID, MessageWasRead (Boolean)

Ce que je besoin est une requête à laquelle je l'entrée de identifiant d'un utilisateur et je reçois tous les messages privés qu'il a reçus. En outre, j'ai également besoin de recevoir le nom d'utilisateur de l'expéditeur de chaque message. Pour cela, j'écrit la requête suivante:

SELECT Users.*, PrivateMessages.*, MessageStatus.* 
FROM PrivateMessages 
INNER JOIN Users ON PrivateMessages.SenderID = Users.UserID 
INNER JOIN MessageStatus ON PrivateMessages.MessageID = MessageStatus.MessageID 
WHERE MessageStatus.ReceiverID=[@userid]; 

Mais pour une raison quelconque quand je l'ai sauver essayer dans ma base de données Access, je reçois l'erreur suivante (traduit en anglais par moi, depuis mon bureau est dans une autre langue) :

erreur de syntaxe (opérateur manquant) à l'expression: "PrivateMessages.SenderID = Users.UserID INNER JOIN MessageStatus sUR PrivateMessages.MessageID = MessageStatus.MessageI".

Des idées qui pourraient causer cela? Merci.

Répondre

4

Vous devez parenthèses avec MS Access:

SELECT Users.*, PrivateMessages.*, MessageStatus.* 
FROM (PrivateMessages 
INNER JOIN Users ON PrivateMessages.SenderID = Users.UserID) 
INNER JOIN MessageStatus ON PrivateMessages.MessageID = MessageStatus.MessageID 
WHERE MessageStatus.ReceiverID=[@userid]; 
+0

wow, ne savaient pas. Je vous remercie! –