2016-04-24 6 views
1

私の問題はちょっと難しいですが、私のベストを尽くす。 Visual StudioでSQLデータベースに接続してC#を使って作業しています。テーブルからすべてのSQL行を選択する方法(2つの列のユニークな組み合わせで)同じ組み合わせが別のテーブルにない場合

私は売り手が来て、彼らのために売るために彼らの本を私たちに与えることができる中古書店データベースを持っています。

  • ブック(当社が販売10冊が含まれ、書籍を識別する一意のISBNとそれぞれ)販売
  • (書籍のISBNで識別される販売されているすべての書籍、および:3つの主要テーブルがありますオリジナル売り手の[SSBID呼び出さ] ID)
  • コピー(販売されているものも含め、これまでDBに存在していたすべての書籍は、[SSIDと呼ばれる]同じISBNと売り手IDで識別)

オリジナルの売り手が同じ書籍を2度販売することは決してないと仮定できます。

お客様が書籍を購入すると、店員は2つのドロップダウンリストを介して各書籍を検索します。最初のDDLには、システムに1冊のISBNが格納されています。 (それが存在しない場合はISBNの一覧を表示する必要はありませ!)

SELECT DISTINCT [ISBN] FROM [Copy] ORDER BY [ISBN] 

は、2つ目のドロップダウン・リストには、同じISBNで書籍を販売している各販売者の売り手のIDを取り込むことになっていません。ただし、すでに販売されている書籍の販売者IDは記載したくありません。私に最も合ったselect文は以下の通りですが、ロジックが完璧だとは思われません。

SELECT [SSID] FROM [Copy] WHERE (SSID, ISBN NOT IN (SELECT SSBID, ISBN FROM Sold)) AND ([ISBN] = @ISBN) ORDER BY [SSID] 

そこで、我々は同時に唯一の我々はすでに持っているISBNに対応したレコードを表示しながら、コピーして販売の両方でSSIDやISBNの同じユニークな組み合わせを持つすべてのレコードをプルする必要はありません選択された。

2番目のクエリはどのように見えるのですか? SSIDとSSBIDの名前が異なるため、クエリの機能に影響しますか?明確にするために

は、ここでは大まかなコピーのレイアウトと販売されている:

コピー

- SSID_______ISBN 
- 115________019 
- 115________528 
- 123________528 
- 503________019 

販売

- SSBID_____ISBN 
- 115_______019 

だから、ダウン、私の最初のドロップに "115" を選択した後2番目のドロップダウンには「528」のみが入力されます。

答えて

0

私が正しく理解していれば、あなたはISBNSSIDの両方にマッチしSoldCopy両方のレコードがありますしない限り、ISBNSoldCopyの両方に参加したいです。 私は方法があるかもしれませんが、おそらくこれが助けになります。

ISBNSoldCopyの両方に参加するが、 Booksは、両方のフィールドに両方のテーブルに一致する場所レコードを除外するために起こって
SELECT b.ISBN, b.SSID 
FROM 
    Books b 
    JOIN Sold s on b.ISBN = s.ISBN 
    JOIN Copy c on b.ISBN = c.ISBN 
    LEFT JOIN Sold s2 on b.ISBN = s2.ISBN and b.SSID = s2.SSID 
    LEFT JOIN Copy c2 on b.ISBN = c2.ISBN and b.SSID = c2.SSID 
WHERE s2.ISBN is null or c2.ISBN is null 

+0

返信ありがとうございます!私は必要以上の情報を追加したかもしれないと思う。ブックテーブルは実際にここで問題を把握すべきではありません。基本的に、私はSoldテーブルにないCopyテーブルのすべてのレコードを取得したいが、これには2つのID(SSIDとISBN)の一致する一意のセットを使用する必要がある。あなたは正しいのですが、IS NULLを使ったLEFT JOINは正しい方法ですが、2つの列を一致させるにはどうしたらいいですか?このような?左の結合からSSIDを選択してください。Bを売りました。(A.SSID = B.SSBIDとA.ISBN = B.ISBN) B.SSBIDとB.ISBNはNULLです。 – Sylenas

+0

最後にそれを動作させました。私は使用しました "SELECT A.SSID FROMコピーを左ジョインBをA.SSID = B.SSBIDとA.ISBN = B.ISBN (B.SSBIDはNULLまたはB.ISBNがNULL)とA.([ ISBN] = @ISBN) "A. [ISBN]"を追加するまで、 "あいまいな列名"エラーが発生しました。それは今素晴らしいです! – Sylenas

関連する問題