Care este SQL-ul corect pentru utilizarea unde ID-ul din Listă și articolele sunt cu operatorul AND

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

  • Dacă id este cheia principală, atunci WHERE (id=1) AND (id = 2) AND (id = 3) va returna 0 rânduri. Întotdeauna.
  • Dacă id nu este cheia primară sau unică, atunci probabil că doriți o diviziune relațională. Care este cazul?
  • Chiar dacă id nu este unic, acesta poate fi doar 1 SAU 2 SAU 3 pe un singur rând.
  • Cred acum îl putem închide ca duplicat al: Căutați în același ID pe mai multe rânduri
  • Sau poate acesta, care are mai multe modalități de a face acesta și un titlu care seamănă cu titlul de aici: Clauza Make IN se comportă ca clauza AND

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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *