我有一點SQL幾乎正在做我想做的事情。我正在使用三個表,用戶,UserPhoneNumbers和UserPhoneNumberTypes。我正在嘗試通過電話號碼獲取用戶列表以進行導出。如何將LEFT JOIN限制爲SQL Server中的第一個結果?
數據庫本身是舊的並且有一些完整性問題。我的問題是,數據庫中每個電話號碼應該只有一種類型,但情況並非如此。當我運行這個時,如果他們包含兩個「家庭」號碼,我會得到每個人的多行結果。
如何修改SQL以取出列出的第一個電話號碼並忽略剩餘的數字?我在SQL Server中,並且我知道TOP語句。但是,如果我將'TOP 1'添加到LEFT JOIN select語句中,它只是給我數據庫中的第一個條目,而不是每個用戶的第一個條目。
這是SQL Server 2000
感謝,
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
取決於您所談論的SQL版本。如果它是SQL Server 2005+,則有許多選項,包括RANK查詢。 – 2010-07-30 21:23:30
SQL Server是版本2000. – Justin808 2010-07-30 21:27:34
解決方案是[這裏] [1],只需用左連接代替連接。 [1]:http://stackoverflow.com/questions/2043259/sql-server-how-to-join-to-first-row – qub1n 2014-05-13 19:48:19