Ho bisogno di unistruzione SQL per utilizzare loperatore IN allinterno degli elementi con ” E “connesso.
SELECT * from tbl_Users WHERE id in [1,2,3]
equivale a:
SELECT * from tbl_Users WHERE (id=1) or (id = 2) or (id = 3)
Ciò di cui ho bisogno è per generare utilizzando loperatore IN (o equivalente):
SELECT * from tbl_Users WHERE (id=1) AND (id = 2) AND (id = 3)
Perché raccolgo tutti gli ID (es: [1,2,3,4,5]) in una stringa e cercare con essa nel DB.
Altre spiegazioni:
LID è sempre una chiave primaria
Il caso è che ho una tabella con tutti i paesi e ogni paese ha diversi standard elettrici in una tabella separata.
Esempio: la Germania richiede sempre “standard1” e “standard2” USA obbligatori sempre “Standard1” e “standard3” La Francia richiede sempre “Standard2”
Se lutente nellapplicazione C # cerca un paese che ha “Standard2”, il sistema dovrebbe fornirgli Germania e Francia.
MA Se lutente desidera paesi con “Standard1” E “standard2”, il sistema dovrebbe fornirgli solo la Germania. -> a causa di “AND”
La mia query era
Select * from [tables and joins] where STANDARD_id IN [1,2]
[1,2] è un elenco concatenato che lutente ha già scelto da un elenco di standard.
Commenti
Risposta
Penso che quello che stai cercando di fare sia divisione relazionale . Ecco la migliore spiegazione che ho trovato
https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/
Onestamente non lo capisco ancora del tutto, ma credo che dovrebbe funzionare (utilizzando una tabella intermedia):
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
Questo è basato sul tuo esempio, ma Ho testato più combinazioni e funziona se i valori commentati vengono modificati.
Ci sono molti altri modi per eseguire la divisione spiegata nel collegamento fornito sopra: dovresti usare quello che si adatta meglio ai tuoi scopi.
id
è la chiave primaria,WHERE (id=1) AND (id = 2) AND (id = 3)
restituirà 0 righe. Sempre.id
non è la chiave primaria o univoca, probabilmente desideri la divisione relazionale. Qual è il caso?id
non è univoco, può essere solo1
OPPURE2
OR3
su ogni singola riga.