Mi a helyes SQL annak használatához, ahol az ID a Listában és az elemek az AND operátorral vannak

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

  • Ha az id az elsődleges kulcs, akkor a WHERE (id=1) AND (id = 2) AND (id = 3) 0 sort ad vissza. Mindig.
  • Ha a id nem az elsődleges vagy egyedi kulcs, akkor valószínűleg relációs felosztást szeretne. Melyik a helyzet?
  • Még ha a id nem is egyedi, csak 1 VAGY 2 VAGY 3 bármelyik sorban.
  • gondolom most bezárhatjuk a következő példányok másolataként: Keresés ugyanazon azonosítón belül több soron át
  • Vagy talán ez, amelynek több módja van ez és egy cím, amely itt hasonlít a címre: Az IN záradék úgy viselkedjen, mint ÉS záradék

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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük