私は次のSELECT文を使用して、3つのテーブルに入力されたリストをウェブサイトのグリッドに挿入しています。いずれかのリストは1つの以上のカテゴリを持つことができますが、私の問題のarrisesは、私は(CategoryY & CategoryZを使用しているListingX)を持っているときCatX &のために二度私のリストに表示されますと、私はちょうどジャンクションテーブルを実装しました3つ以上のテーブルの結合で重複を削除します
BND_Listing = Main Data
BND_ListingCategories = My Category data for the Listing Table
BND_LingingJunction = Junction Table for multi-category listings.
なぜなら、なぜ2回表示されているのか理解していますが、すべてのカテゴリごとに1回だけ表示されるようにしたいのです。
SELECT DISTINCT * FROM BND_ListingJunction
JOIN BND_listing on BND_listing.LID = BND_ListingJunction.Junc_LID
JOIN BND_ListingCategories
on BND_ListingCategories.CatID =
BND_ListingJunction.Junc_CatID
WHERE (CategoryName = '[querystring:filter-Category]' or
'[querystring:filter-Category]'='All')
and (City = '[querystring:filter-City]' or
'[querystring:filter-City]'='All')
and (Region= '[querystring:filter-State]' or
'[querystring:filter-State]'='All')
and (Country= '[querystring:filter-Country]' or
'[querystring:filter-Country]'='All')
and isnull(Company,'') <> ''
ORDER by Company ASC
私は明確な使用は、それは私のジャンクションテーブルから引いて第一だから、おそらく、クエリのニーズが異なって編成することがここで働いていないことを実現?
distinctはクエリのすべての出力列に適用されるため、BND_Listingを使用してください。 –
@CharlesBretanaそういう意味で私はJOINSのものにも明確に適用していますか? – UserSN
いいえ、私の編集した答えを見てください。 Distinctはクエリ全体の最終出力に適用されます。出力全体(すべての列)を考慮して、同じ行(すべての列値が同一)の行がある場合は、余分な重複が排除されます。クエリでは、クエリのすべてのテーブルのすべてが選択されているため、各カテゴリのカテゴリ値が異なるため、これらの行は異なり、排除されません。リスト表の列のみに出力を制限する必要があります。必要な列を明示的にリストすることも、サブクエリを使用することもできます。 –