Szükségem van egy SQL utasításra az IN operátor használatához a ” És “csatlakoztatva.
SELECT * from tbl_Users WHERE id in [1,2,3]
egyenértékű:
SELECT * from tbl_Users WHERE (id=1) or (id = 2) or (id = 3)
Amire szükségem van generálás az IN operátor (vagy azzal egyenértékű) használatával:
SELECT * from tbl_Users WHERE (id=1) AND (id = 2) AND (id = 3)
Mivel az összes azonosítót összegyűjtöttem (például: [1,2,3,4,5]) egy karakterláncban, és keressen vele a DB-ben.
További magyarázat:
Az azonosító mindig elsődleges kulcs.
Esetem van egy olyan táblázatom, amely minden országot tartalmaz, és minden országban különféle elektromos szabványok vannak külön táblázatban.
Példa: Németország mindig “standard1” és “standard2” megköveteli az USA-t, mindig kötelező “Standard1” és “standard3” Franciaország szükséges mindig “Standard2”
Ha a C # alkalmazás felhasználói a következőre keresnek: egy olyan országot, amelynek “Standard2” van, a rendszernek meg kell adnia neki Németországot és Franciaországot.
DE Ha a felhasználó “Standard1” ÉS “standard2” országokat szeretne, a rendszernek csak Németországot kell megadnia. -> az “AND” miatt
A lekérdezésem
Select * from [tables and joins] where STANDARD_id IN [1,2]
[1,2] egy összefűzött lista, amelyet a felhasználó már választott a szabványok listájából.
Megjegyzések
Válasz
Azt hiszem, amit megpróbálsz, az relációs felosztás . Itt találom a legjobb magyarázatot
https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/
Őszintén szólva még nem értem ezt magam teljesen, de úgy gondolom, hogy ennek működnie kell (egy köztes tábla használatával):
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
Ez a példáján alapul, de Több kombinációt teszteltem, és akkor működik, ha a megjegyzett értékeket megváltoztatják.
A felosztásnak számos más módja van, amelyet a fenti link mutat be – a céljának leginkább megfelelőt kell használnia.
id
az elsődleges kulcs, akkor aWHERE (id=1) AND (id = 2) AND (id = 3)
0 sort ad vissza. Mindig.id
nem az elsődleges vagy egyedi kulcs, akkor valószínűleg relációs felosztást szeretne. Melyik a helyzet?id
nem is egyedi, csak1
VAGY2
VAGY3
bármelyik sorban.