Comment puis-je limiter un LEFT JOIN pour le 1er résultat dans SQL Server?

J'ai un peu de SQL, qui est presque de faire ce que je veux faire. Je travaille avec trois tables, un des Utilisateurs, UserPhoneNumbers et UserPhoneNumberTypes. Je vais essayer d'obtenir une liste des utilisateurs avec leurs numéros de téléphone pour une exportation.

La base de données elle-même est ancien et a quelques problèmes d'intégrité. Mon problème est qu'il ne doit jamais être 1 type de chaque numéro de téléphone dans la base de données, mais ce n'est pas le cas. Lorsque j'exécute ce je obtenir plusieurs lignes de résultats pour chaque personne si elles contiennent, par exemple, deux "à la Maison" numéros.

Comment puis-je modifier le SQL pour prendre le premier numéro de téléphone indiqué et ignorer les autres numéros? Je suis dans SQL Server et je sais que sur le HAUT de l'instruction. Mais si j'ajoute "TOP 1" à GAUCHE REJOINDRE instruction select sa juste me donner la 1ère entrée dans la base de données, pas la 1ère entrée pour chaque Utilisateur.

C'est pour SQL Server 2000.

Merci,

SELECT  Users.UserID, 
  Users.FirstName, Users.LastName,
  HomePhone, WorkPhone, FaxNumber

FROM Users

LEFT JOIN
 (SELECT UserID, PhoneNumber AS HomePhone
 FROM UserPhoneNumbers LEFT JOIN UserPhoneNumberTypes ON UserPhoneNumbers.UserPhoneNumberTypeID=UserPhoneNumberTypes.UserPhoneNumberTypeID
 WHERE UserPhoneNumberTypes.PhoneNumberType='Home') AS tmpHomePhone
 ON tmpHomePhone.UserID = Users.UserID
LEFT JOIN
 (SELECT UserID, PhoneNumber AS WorkPhone
 FROM UserPhoneNumbers LEFT JOIN UserPhoneNumberTypes ON UserPhoneNumbers.UserPhoneNumberTypeID=UserPhoneNumberTypes.UserPhoneNumberTypeID
 WHERE UserPhoneNumberTypes.PhoneNumberType='Work') AS tmpWorkPhone
 ON tmpWorkPhone.UserID = Users.UserID
LEFT JOIN
 (SELECT UserID, PhoneNumber AS FaxNumber
 FROM UserPhoneNumbers LEFT JOIN UserPhoneNumberTypes ON UserPhoneNumbers.UserPhoneNumberTypeID=UserPhoneNumberTypes.UserPhoneNumberTypeID
 WHERE UserPhoneNumberTypes.PhoneNumberType='Fax') AS tmpFaxNumber
 ON tmpFaxNumber.UserID = Users.UserID
  • Qui dépend de la version de SQL, vous êtes en train de parler. Si c'est SQL Server 2005+, vous avez de nombreuses options, y compris RANG des requêtes.
  • SQL Server est la version 2000.
  • La solution est [ici][1], il suffit de remplacer jointure left join. [1]: stackoverflow.com/questions/2043259/...
InformationsquelleAutor Justin808 | 2010-07-30