목록의 ID와 항목이 AND 연산자와 함께 사용되는 올바른 SQL은 무엇입니까

“가있는 항목 내에서 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]는 사용자가 이미 선택한 연결된 목록입니다. 표준 목록에서.

댓글

  • id가 기본 키인 경우 WHERE (id=1) AND (id = 2) AND (id = 3)는 0 개의 행을 반환합니다. 항상.
  • id가 기본 또는 고유 키가 아닌 경우 관계형 분할을 원할 것입니다. 어떤 경우입니까?
  • id가 고유하지 않더라도 1 만 가능합니다. 또는 2 또는 모든 단일 행에서 3.
  • 나는 추측한다. 이제 다음의 중복으로 닫을 수 있습니다. 여러 행에 걸쳐 동일한 ID 내 검색
  • 또는 더 많은 방법이있는이 항목 여기에있는 제목과 유사한 제목 : Make IN 절이 AND 절처럼 작동

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>

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다