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
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.
id
, niinWHERE (id=1) AND (id = 2) AND (id = 3)
palauttaa 0 riviä. Aina.id
ei ole ensisijainen tai yksilöllinen avain, haluat todennäköisesti relaatiojaon. Mikä on kyse?id
ei olisikaan ainutlaatuinen, se voi olla vain1
TAI2
TAI3
millä tahansa yksittäisellä rivillä.