Was ist das richtige SQL für die Verwendung von where ID in List und den Elementen mit dem AND-Operator

Ich benötige eine SQL-Anweisung, um den IN-Operator innerhalb der Elemente mit „zu verwenden. Und „verbunden“.

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

entspricht:

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

Was ich brauche, ist So generieren Sie mit dem IN-Operator (oder einem gleichwertigen Operator):

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

Weil ich alle IDs sammle (Beispiel: [1,2,3,4,5]) in einer Zeichenfolge und suchen Sie damit in der Datenbank.

Weitere Erläuterungen:

ID ist immer ein Primärschlüssel

Ich habe eine Tabelle, die alle Länder enthält, und jedes Land hat mehrere elektrische Standards in einer separaten Tabelle.

Beispiel: Deutschland benötigt immer „Standard1“ und „Standard2“ USA benötigt immer „Standard1“ und „Standard3“ Frankreich benötigt immer „Standard2“

Wenn der Benutzer in der C # -Anwendung nach sucht In einem Land mit „Standard2“ sollte das System ihm Deutschland und Frankreich geben.

ABER If Der Benutzer möchte Länder mit „Standard1“ UND „standard2“. Das System sollte ihm nur Deutschland geben. -> wegen „UND“

Meine Abfrage war

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

[1,2] ist eine verkettete Liste, die der Benutzer bereits ausgewählt hat aus einer Liste von Standards.

Kommentare

  • Wenn id der Primärschlüssel ist, dann WHERE (id=1) AND (id = 2) AND (id = 3) gibt 0 Zeilen zurück. Immer.
  • Wenn id nicht der primäre oder eindeutige Schlüssel ist, möchten Sie wahrscheinlich eine relationale Aufteilung. Was ist der Fall?
  • Auch wenn id nicht eindeutig ist, kann es nur 1 ODER sein 2 ODER 3 in einer einzelnen Zeile.
  • Ich denke Jetzt können wir es als Duplikat von schließen: Suche innerhalb derselben ID über mehrere Zeilen hinweg
  • Oder vielleicht diese, die mehr Möglichkeiten bietet es und ein Titel, der dem Titel hier ähnelt: Die IN-Klausel verhält sich wie die AND-Klausel

Answer

Ich denke, Sie versuchen relationale Division . Hier ist die beste Erklärung, die ich finden konnte

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

Ehrlich gesagt verstehe ich das selbst noch nicht ganz, aber ich glaube, dass dies funktionieren sollte (unter Verwendung einer Zwischentabelle):

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 

Dies basiert auf Ihrem Beispiel, aber Ich habe mehr Kombinationen getestet und es funktioniert, wenn die kommentierten Werte geändert werden.

Es gibt viele andere Möglichkeiten, die unter dem oben angegebenen Link erläuterte Unterteilung durchzuführen. Sie sollten diejenige verwenden, die Ihren Zwecken am besten entspricht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.