Hva er riktig SQL for bruk av hvor ID i Liste og elementene er med OG-operatør

Jeg trenger en SQL-setning for å bruke IN-operatør innenfor elementene med » Og «tilkoblet.

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

tilsvarer:

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

Det jeg trenger er å generere ved hjelp av IN-operator (eller tilsvarende):

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

Fordi jeg samler alle ID-ene (f.eks: [1,2,3,4,5]) i en streng og søk med den i DB.

Mer forklaring:

ID er alltid en primærnøkkel

Saken er at jeg har en tabell som har alle land, og hvert land har flere elektriske standarder i hver sin tabell.

Eksempel: Tyskland krever alltid «standard1» og «standard2» USA krever alltid «Standard1» og «standard3» Frankrike krever alltid «Standard2»

Hvis brukeren i C # -programmet søker etter et land som har «Standard2», bør systemet gi ham Tyskland og Frankrike.

MEN Hvis brukeren ønsker land med «Standard1» OG «standard2», bør systemet bare gi ham Tyskland. -> på grunn av «AND»

Min forespørsel var

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

[1,2] er en sammenkoblet liste som brukeren allerede velger fra en liste over standarder.

Kommentarer

  • Hvis id er den primære nøkkelen, så er WHERE (id=1) AND (id = 2) AND (id = 3) returnerer 0 rader. Alltid.
  • Hvis id ikke er den primære eller unike nøkkelen, vil du sannsynligvis ha relasjonell inndeling. Hva er tilfelle?
  • Selv om id ikke er unikt, kan det bare være 1 ELLER 2 ELLER 3 på en enkelt rad.
  • antar jeg nå kan vi lukke det som duplikat av: Søk innenfor samme ID på tvers av flere rader
  • Eller kanskje denne, som har flere måter å gjøre den og en tittel som ligner på tittelen her: Gjør IN-setningen oppføre seg som AND-setningen

Svar

Jeg tror det du prøver å gjøre er relasjonell divisjon . Her er den beste forklaringen jeg kunne finne

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

Ærlig talt forstår jeg ikke dette selv ennå, men jeg mener at dette skal fungere (ved hjelp av en mellomtabell):

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 

Dette er basert på eksemplet ditt, men Jeg testet flere kombinasjoner, og det fungerer hvis de kommenterte verdiene endres.

Det er mange andre måter å gjøre divisjonen på, som er forklart i lenken ovenfor – du bør bruke den som passer best for dine formål.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *