这是我的情况的工作流程:
我有一个网站,允许注册用户注册当地奖品赞助商(即:企业)的奖品例如,可能有一个页面将必胜客作为奖品赞助商,注册/认证用户只需点击“输入绘图”,一旦他们这样做,他们就不能再次点击它。
以下是3张表:
BD_Listing(此表为奖品赞助商,包括ListingID、Title、ContactPerson、Email、奖品等基本列)
用户(此表是网站上的注册用户,包括用户ID、名字、姓氏、电子邮件等)
PrizeEntry(此表是注册人数据所在的位置:EntryID、ListingID、User_ID、Date_Created)
现在所有这些都可以正常工作,只要将数据存储在数据库中。我的问题是选择。我在网站的 ADMIN 端构建了一个自定义模块,我想执行以下操作:
这是我的有效查询:
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 的开始学习曲线。
非常感谢您的任何建议。