Am nevoie de o Instrucțiune SQL pentru a utiliza operatorul IN în articolele cu ” Și „conectat.
SELECT * from tbl_Users WHERE id in [1,2,3]
este echivalent cu:
SELECT * from tbl_Users WHERE (id=1) or (id = 2) or (id = 3)
Ceea ce am nevoie este pentru a genera folosind operatorul IN (sau echivalent):
SELECT * from tbl_Users WHERE (id=1) AND (id = 2) AND (id = 3)
Deoarece colectez toate ID-urile (ex: [1,2,3,4,5]) într-un șir și căutați cu acesta în DB.
Mai multe explicații:
ID-ul este întotdeauna o cheie principală
Cazul este că am un tabel care conține toate țările și fiecare țară are mai multe standarde electrice într-un tabel separat.
Exemplu: Germania necesită întotdeauna „standard1” și „standard2” SUA solicită întotdeauna „Standard1” și „standard3” Franța solicită întotdeauna „Standard2”
Dacă utilizatorul din aplicația C # caută o țară care are „Standard2”, sistemul ar trebui să îi ofere Germania și Franța.
DAR Dacă utilizatorul dorește țări cu „Standard1” ȘI „standard2”, sistemul ar trebui să îi ofere doar Germania. -> din cauza „ȘI”
Interogarea mea a fost
Select * from [tables and joins] where STANDARD_id IN [1,2]
[1,2] este o listă concatenată pe care utilizatorul o alege deja dintr-o listă de standarde.
Comentarii
Răspuns
Cred că ceea ce încercați să faceți este diviziune relațională . Iată cea mai bună explicație pe care am putut-o găsi
https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/
Sincer, încă nu înțeleg pe deplin acest lucru, dar cred că acest lucru ar trebui să funcționeze (folosind un tabel intermediar):
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
Acest lucru se bazează pe exemplul dvs., dar Am testat mai multe combinații și funcționează dacă valorile comentate sunt modificate.
Există multe alte modalități de a face diviziunea explicate în linkul furnizat mai sus – ar trebui să o utilizați pe cea care se potrivește cel mai bine scopurilor dvs.
id
este cheia principală, atunciWHERE (id=1) AND (id = 2) AND (id = 3)
va returna 0 rânduri. Întotdeauna.id
nu este cheia primară sau unică, atunci probabil că doriți o diviziune relațională. Care este cazul?id
nu este unic, acesta poate fi doar1
SAU2
SAU3
pe un singur rând.