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.
id
est la clé primaire, alorsWHERE (id=1) AND (id = 2) AND (id = 3)
renverra 0 ligne. Toujours.id
nest pas la clé primaire ou unique, vous souhaitez probablement une division relationnelle. Quel est le cas?id
nest pas unique, il ne peut être que1
OU2
OU3
sur une seule ligne.