Mikä on oikea SQL-koodi käyttää missä ID-luettelo ja kohteet ovat AND-operaattorin kanssa

Tarvitsen SQL-käskyn voidaksesi käyttää IN-operaattoria kohteissa, joissa on ” Ja ”yhdistetty.

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

vastaa:

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

Tarvitsen on luoda IN-operaattorilla (tai vastaavalla):

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

Koska kerään kaikki tunnukset (esim: [1,2,3,4,5]) yhdessä merkkijonossa ja hae sitä tietokannasta.

Lisää selitystä:

ID on aina ensisijainen avain

Minulla on taulukko, jossa on kaikki maat, ja jokaisella maalla on useita sähköstandardeja erillisessä taulukossa.

maalle, jolla on ”Standard2”, järjestelmän pitäisi antaa hänelle Saksa ja Ranska.

MUTTA Jos Käyttäjä haluaa maat, joissa on ”Standard1” JA ”standard2”, järjestelmän pitäisi antaa hänelle vain Saksa. -> AND: n vuoksi

Kyselyni oli

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

[1,2] on ketjutettu luettelo, jonka käyttäjä on jo valinnut standardiluettelosta.

Kommentit

  • Jos ensisijainen avain on id, niin WHERE (id=1) AND (id = 2) AND (id = 3) palauttaa 0 riviä. Aina.
  • Jos id ei ole ensisijainen tai yksilöllinen avain, haluat todennäköisesti relaatiojaon. Mikä on kyse?
  • Vaikka id ei olisikaan ainutlaatuinen, se voi olla vain 1 TAI 2 TAI 3 millä tahansa yksittäisellä rivillä.
  • Luulen nyt voimme sulkea sen kopiona: Haku saman tunnuksen sisällä useiden rivien yli
  • Tai ehkä tämä, jolla on enemmän tapoja tehdä se ja otsikko, joka muistuttaa otsikkoa tässä: Tee IN-lauseke käyttäytymään kuten JA-lause

Vastaa

Mielestäni se, mitä yrität tehdä, on relaatiojako . Tässä on paras selitys, jonka voisin löytää

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

Rehellisesti, en ymmärrä tätä vielä täysin, mutta uskon, että tämän pitäisi toimia (käyttämällä välitaulukkoa):

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 

Tämä perustuu esimerkkiin, mutta Testasin useampia yhdistelmiä ja se toimii, jos kommentoituja arvoja muutetaan.

Yllä olevassa linkissä on selitetty monia muita tapoja jakaa – sinun tulee käyttää tarkoitukseesi sopivinta.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *