Wat is de juiste SQL voor het gebruik van where ID in List en de items zijn met AND-operator

Ik heb een SQL-instructie nodig om de IN-operator te gebruiken binnen de items met ” En “verbonden.

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

is gelijk aan:

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

Wat ik nodig heb is genereren met de IN-operator (of equivalent):

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

Omdat ik alle IDs verzamel (bijv: [1,2,3,4,5]) in een string en zoek ermee in de database.

Meer uitleg:

ID is altijd een primaire sleutel

Het geval is dat ik een tabel heb met alle landen en elk land heeft verschillende elektrische normen in een aparte tabel.

Voorbeeld: Duitsland vereist altijd “standaard1” en “standaard2” VS vereist altijd “Standaard1” en “standaard3” Frankrijk vereist altijd “Standaard2”

Als de gebruiker in de C # -toepassing zoekt naar een land dat “Standard2” heeft, zou het systeem hem Duitsland en Frankrijk moeten geven.

MAAR Als de gebruiker wil landen met “Standard1” EN “standard2”, het systeem zou hem alleen Duitsland moeten geven. -> vanwege “AND”

Mijn zoekopdracht was

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

[1,2] is een aaneengeschakelde lijst die de gebruiker al heeft gekozen uit een lijst met standaarden.

Opmerkingen

  • Als id de primaire sleutel is, dan is WHERE (id=1) AND (id = 2) AND (id = 3) retourneert 0 rijen. Altijd.
  • Als id niet de primaire of unieke sleutel is, dan wil je waarschijnlijk een relationele verdeling. Wat is het geval?
  • Zelfs als id niet uniek is, kan het alleen 1 OF 2 OF 3 op een enkele rij.
  • Ik denk dat nu kunnen we het sluiten als duplicaat van: Zoeken binnen dezelfde ID in verschillende rijen
  • Of misschien deze, die meer manieren heeft om te doen it en een titel die lijkt op de titel hier: Make IN-clausule gedragen als EN-clausule

Antwoord

Ik denk dat wat u probeert te doen is relationele divisie . Hier is de beste uitleg die ik kon vinden

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

Eerlijk gezegd begrijp ik dit zelf nog niet helemaal, maar ik denk dat dit zou moeten werken (met een tussenliggende tabel):

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 

Dit is gebaseerd op uw voorbeeld, maar Ik heb meer combinaties getest en het werkt als de becommentarieerde waarden worden gewijzigd.

Er zijn veel andere manieren om de indeling uit te voeren die wordt uitgelegd in de bovenstaande link – u moet degene gebruiken die het beste bij uw doeleinden past.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *