這裏限制的結果是我的情況的工作流程:SQL - 加入3個表,但基於第一臺
我有一個網站,允許註冊用戶從本地獎品贊助商獎品註冊(即:例如,可能有一個頁面將必勝客作爲贊助商,而註冊/認證的用戶只需點擊「輸入繪圖」,一旦他們做了,他們就不能再次點擊它。
這裏有3個表:
BD_Listing(該表是用於獎品贊助商,並且包括基本列如ListingID,標題,ContactPerson,電郵,獎)
用戶(此表適用於網站上的註冊用戶,包括用戶名,名字,姓氏,電子郵件等)
PrizeEntry(此表是註冊人數據的來源:EntryID,ListingID,User_ID,Date_Created)
現在所有這些工作都很好,至於將數據存儲在數據庫中。我的問題是SELECT。我有我建立的網站管理員側的自定義模塊,我想執行以下操作:
這裏是我的查詢工作:
SELECT ListingID, Title, ContactEmail, PrizeSponsor
FROM [BD_Listing]
WHERE PrizeSponsor = 'True'
如果我顯示這個數據在網站上的表,它工作正常。問題是,我需要更多的數據,特別是PrizeEntry表中的User_ID。此User_ID需要與Users表中的UserID連接,因爲我需要從其中獲取其他信息。
SELECT a.ListingID, a.Title, a.ContactEmail, a.PrizeSponsor
b.ListingID, b.User_ID
FROM BD_Listing a INNER JOIN PrizeEntry b ON a.ListingID = b.ListingID
WHERE a.PrizeSponsor = 'True'
現在,第一個問題出現了。如果有20人註冊必勝客,那麼我會得到21行數據,這不是我要做的。這裏是最終我的代碼加入所有的信息和它的理由,然後你能告訴我怎麼白癡是對做錯了:)
SELECT a.ListingID, a.Title, a.ContactEmail, a.PrizeSponsor
b.ListingID, b.User_ID
c.UserID, c.FirstName, c.LastName, c.Email
,(SELECT COUNT(ListingID) AS EntryCount FROM PrizeEntry WHERE (ListingID = a.ListingID)) AS EntryCount
,(SELECT TOP 1 User_ID AS RandomWinner FROM PrizeEntry WHERE (ListingID = a.ListingID)ORDER BY NEWID()) as RandomWinner
FROM BD_Listing a INNER JOIN PrizeEntry B on a.ListingID = b.ListingID
INNER JOIN Users C on b.User_ID = c.UserID
WHERE a.PrizeSponsor = 'True'
好了,所以在我的表顯示這個數據我只想要必勝客出現一次,但相反,因爲它與PrizeEntry表連接在一起,它會多次出現。
我想看看:
Business: Pizza Hut // comes from the BD_Listing table
Contact: John Doe // comes from the BD_Listing table
Total Registrations: 20 // count from the PrizeEntry table
Random Winner: John Smith (UserID:10) // result from the subquery
但是,相反,我看到的多行對每個企業,每一個獎項的註冊時間。
我對這段長度表示歉意......我是新來的,這是我的第二篇文章。並閱讀SQL的開始學習曲線。
非常感謝你的任何建議。
你可以包括你當前的數據和所需的輸出?我很難理解你想要做什麼。 – 2012-08-14 21:56:58
我試着回答,但我無法回答。從最終查詢中刪除表「b」和「c」,結果應該是你想要的。要獲得更多信息,請將其作爲子查詢並加入適當的表中。 – 2012-08-14 22:04:19
謝謝大家的幫助。戈登的解決方案對我來說非常合適。但是,我將檢查每一個以更好地理解您的建議。我非常感謝幫助。 – user1447679 2012-08-14 23:44:08