これが私の状況のワークフローです:
登録ユーザーが地元の賞スポンサー(例:企業)からの賞を登録できるウェブサイトを持っています。たとえば、ピザハットを賞スポンサーとして持つページがあり、登録/認証されたユーザーは[Enter the描画」し、一度実行すると、再度クリックすることはできません。
3つの表は次のとおりです。
BD_Listing(このテーブルは賞のスポンサー用であり、ListingID、Title、ContactPerson、Email、Prizeなどの基本的な列が含まれています)
ユーザー(この表はサイトの登録ユーザー用であり、UserID、FirstName、LastName、Eメールなどが含まれています)
PrizeEntry(このテーブルは登録者データが入る場所です:EntryID、ListingID、User_ID、Date_Created)
これで、データベースにデータを保存する限り、これはすべて正常に機能します。私の問題はSELECTです。Webサイトの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人がPizzaHutに登録すると、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'
さて、このデータを表示するテーブルでは、ピザハットを1回だけ表示したいのですが、代わりに、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
しかし、代わりに、賞品が登録されるたびに、ビジネスごとに複数の行が表示されます。
長さをお詫びします...私はここで新しいです、そしてこれは私の2番目の投稿です。そして、SQLの最初の学習曲線をたどります。
アドバイスありがとうございます。