リスト内のwhereIDとアイテムがAND演算子

で使用するための正しいSQLは何ですか?

アイテム内でIN演算子を使用するにはSQLステートメントが必要です。そして、「接続されました。

SELECT * from tbl_Users WHERE id in [1,2,3] 

は次と同等です:

SELECT * from tbl_Users WHERE (id=1) or (id = 2) or (id = 3) 

必要なものはIN演算子(または同等のもの)を使用して生成するには:

SELECT * from tbl_Users WHERE (id=1) AND (id = 2) AND (id = 3) 

すべてのIDを収集するため(例:[1,2,3,4,5]) 1つの文字列で検索し、DBで検索します。

詳細説明:

IDは常に主キーです

この場合、すべての国を含むテーブルがあり、各国には別々のテーブルにいくつかの電気規格があります。

例:ドイツでは常に「standard1」と「standard2」が必要米国では常に「Standard1」と「standard3」が必要フランスでは常に「Standard2」が必要

C#アプリケーションのユーザーが「Standard2」がある国の場合、システムは彼にドイツとフランスを与える必要があります。

ただし、の場合ユーザーが「Standard1」 AND 「standard2」の国を希望している場合、システムはドイツのみを提供する必要があります。 ->「AND」のため

クエリは

Select * from [tables and joins] where STANDARD_id IN [1,2] 

[1,2]は、ユーザーがすでに選択した連結リストです標準のリストから。

コメント

  • idが主キーの場合、WHERE (id=1) AND (id = 2) AND (id = 3)は0行を返します。常に。
  • idが主キーまたは一意キーでない場合は、おそらくリレーショナル分割が必要です。どちらの場合ですか?
  • idが一意でなくても、1 または 2 または 3任意の1行。
  • 推測します。これで、次の複製として閉じることができます:複数の行にわたる同じID内で検索
  • または、これにはさらに多くの方法がありますこれと、ここのタイトルに似たタイトル: IN句をAND句のように動作させる

回答

あなたがやろうとしているのはリレーショナル部門だと思います。これが私が見つけた最良の説明です

https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/

正直なところ、私はまだこれを完全には理解していませんが、これは機能するはずです(中間テーブルを使用):

CREATE TABLE tblCountry ( countryId int, countryName nvarchar(100) ) INSERT INTO tblCountry SELECT 1, "Germany" UNION SELECT 2, "United States" UNION SELECT 3, "France" CREATE TABLE tblStandards ( standardId int, standardName nvarchar(100) ) INSERT INTO tblStandards SELECT 1, "standard_1" UNION SELECT 2, "standard_2" UNION SELECT 3, "standard_3" CREATE TABLE tblCountryStandards ( countryId int, standardId int ) INSERT INTO tblCountryStandards SELECT 1, 1 UNION SELECT 1, 2 UNION SELECT 2, 1 UNION SELECT 2, 3 UNION SELECT 3, 2 SELECT countryName FROM tblCountry INNER JOIN tblCountryStandards ON tblCountry.countryId = tblCountryStandards.countryId INNER JOIN tblStandards ON tblStandards.standardId = tblCountryStandards.standardId WHERE tblStandards.standardId IN (1, 2) -- unique standards selected by user GROUP BY tblCountry.countryName HAVING COUNT(DISTINCT tblStandards.standardId) = 2 -- number of standards selected by user above 

これはあなたの例に基づいていますが、さらに多くの組み合わせをテストしましたが、コメント値を変更しても機能します。

上記のリンクで説明されている分割を行う方法は他にもたくさんあります。目的に最も適したものを使用する必要があります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です