“가있는 항목 내에서 IN 연산자를 사용하려면 SQL 문이 필요합니다. 그리고 “연결됨.
SELECT * from tbl_Users WHERE id in [1,2,3]
는 다음과 같습니다.
SELECT * from tbl_Users WHERE (id=1) or (id = 2) or (id = 3)
필요한 것은 IN 연산자 (또는 이와 동등한)를 사용하여 생성하려면 :
SELECT * from tbl_Users WHERE (id=1) AND (id = 2) AND (id = 3)
모든 ID를 수집하기 때문에 (예 : [1,2,3,4,5]) 하나의 문자열로 DB에서 검색합니다.
추가 설명 :
ID는 항상 기본 키입니다.
모든 국가가 포함 된 테이블이 있고 각 국가마다 별도의 테이블에 여러 전기 표준이 있습니다.
예 : 독일은 항상 “standard1″및 “standard2″필요 USA 필수 항상 “Standard1″및 “standard3″프랑스 필수 항상 “Standard2”
C # 애플리케이션의 사용자가 다음을 검색하는 경우 “Standard2″가있는 국가 인 경우 시스템은 그에게 독일과 프랑스를 제공해야합니다.
그러나 사용자는 “Standard1” 및 “standard2″가있는 국가를 원합니다. 시스템은 독일 만 제공해야합니다. -> “AND”때문에
내 쿼리는
Select * from [tables and joins] where STANDARD_id IN [1,2]
[1,2]는 사용자가 이미 선택한 연결된 목록입니다. 표준 목록에서.
댓글
Answer
당신이하려는 일은 관계형 분할 입니다. 내가 찾을 수있는 가장 좋은 설명은 다음과 같습니다.
https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/
솔직히 아직이 부분을 완전히 이해하지는 못합니다.하지만 이것이 효과가있을 것이라고 생각합니다 (중간 테이블 사용).
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
이것은 귀하의 예를 기반으로하지만 더 많은 조합을 테스트했으며 주석이 달린 값이 변경되면 작동합니다.
위에 제공된 링크에 설명 된 분할을 수행하는 다른 방법이 많이 있습니다. 목적에 가장 적합한 것을 사용해야합니다.
p>
id
가 기본 키인 경우WHERE (id=1) AND (id = 2) AND (id = 3)
는 0 개의 행을 반환합니다. 항상.id
가 기본 또는 고유 키가 아닌 경우 관계형 분할을 원할 것입니다. 어떤 경우입니까?id
가 고유하지 않더라도1
만 가능합니다. 또는2
또는 모든 단일 행에서3
.