Quel est le SQL correct pour utiliser où lID dans la liste et les éléments sont avec lopérateur AND

Jai besoin dune instruction SQL pour utiliser lopérateur IN dans les éléments avec  » Et « connecté.

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

équivaut à:

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

Ce dont jai besoin cest pour générer en utilisant lopérateur IN (ou équivalent):

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

Parce que je collecte tous les identifiants (ex: [1,2,3,4,5]) dans une chaîne et recherchez avec elle dans la base de données.

Plus dexplications:

LID est toujours une clé primaire

Le cas est que jai une table qui a tous les pays, et chaque pays a plusieurs normes électriques dans un tableau séparé.

Exemple: lAllemagne exige toujours « standard1 » et « standard2 » USA requis toujours « Standard1 » et « standard3 » France requis toujours « Standard2 »

Si lutilisateur dans lapplication C # recherche un pays qui a « Standard2 », le système devrait lui donner lAllemagne et la France.

MAIS Si lutilisateur veut des pays avec « Standard1 » ET « standard2 », le système ne devrait lui donner que lAllemagne. -> à cause de « ET »

Ma requête était

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

[1,2] est une liste concaténée que lutilisateur a déjà choisie à partir dune liste de normes.

Commentaires

Réponse

Je pense que ce que vous essayez de faire est de division relationnelle . Voici la meilleure explication que jai pu trouver

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

Honnêtement, je ne comprends pas encore tout à fait cela moi-même, mais je pense que cela devrait fonctionner (en utilisant une table intermédiaire):

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 

Ceci est basé sur votre exemple, mais Jai testé plus de combinaisons et cela fonctionne si les valeurs commentées sont modifiées.

Il existe de nombreuses autres façons de faire la division expliquée dans le lien ci-dessus – vous devriez utiliser celle qui convient le mieux à vos besoins.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *