私の問題はちょっと難しいですが、私のベストを尽くす。 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」のみが入力されます。
返信ありがとうございます!私は必要以上の情報を追加したかもしれないと思う。ブックテーブルは実際にここで問題を把握すべきではありません。基本的に、私は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
最後にそれを動作させました。私は使用しました "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