2011-05-04 3 views
1

원래 질문은 다음 어디에서 개발 된 MySQL의 질문 : 몇 가지 유용한 답변어디 IN()와 IN() - A = 1, A = 2 명 0을 반환 행

Where A=1 AND A=2 returns 0 row problem - (Short Mysql question)

감사합니다 .

Tag 1,2,3 - category A 
Tag 4,5,6 - category B 
Tag 7,8,9 - category C 

내가 달성하고자하는 "OR 조건"같은 범주하지만 "AND 조건"

사실 진짜 문제는 다음이다 (하지만 곧 내가 문제를 간단하게 오버 할 수 있습니다 실현) 다른 카테고리. 그래서 제가 답변에서 알아 내려고 노력하고 있어요

-- I want id with Tag 1,4 or 1,2,4 but not 4 
SELECT id FROM table WHERE Tag IN (1,2) AND Tag (4) 

-- Tag 1,4 or 1,5 but not 1 
SELECT id FROM table WHERE Tag IN (1) AND Tag (4,5) 

-- Only Tag 1,4,9 
SELECT id FROM table WHERE Tag IN (1) AND Tag (4) AND Tag (9) 

같은 것을 반환 할 수 있지만, 어떤 퀵 가이드는 감사하겠습니다!

답변

1

당신이 태그 ID를 반환 할 : 당신이 (만 주어진 모든 태그 ID 태그 된 것)은 주어진 태그 ID 태그 된 그 범주 원하는처럼

+0

도움이되었습니다. 감사! – user706087

0

'꼭 있어야하는'상태 인 것처럼 들리지만 선택 목록에있는 것만 선택하려고합니다.

이 시도 : 당신의 소스 데이터가 어떻게 생겼는지 분명하지 않다

SELECT id from Table 
WHERE Tag IN (1,2) 
AND EXISTS (SELECT 1 FROM Table WHERE Tag=4) 

. 당신은 명확히 할 수 있습니까? 나의 이해에서

Select id from Table 
WHERE tag in (A,B,C) 
Group by id 
Having count(id)>=3 
1

는 소리 적어도 두 가지 다른 범주를 통해 다음을 시도하십시오.

+0

이 정보가 도움이되었습니다. 감사! – user706087

0

이것은 기본적으로 이전 질문에 대한 대답과 같습니다.

차이점은 HAVING 절에 있습니다. 이제 각 태그 그룹에 다른 번호가 할당됩니다. 따라서 id in (1,2)에는 1이 부여됩니다. else 조항은 태그 번호 4에 적용되며이 태그에는 그룹 번호 2이 부여됩니다. 그런 다음 id에 대한 다른 태그 그룹 번호의 수를 계산하고 두 태그 그룹이 존재 함을 의미하는 카운트 2를 갖는 id을 반환합니다.

SELECT id 
FROM table 
WHERE Tag in (1,2,4) 
GROUP BY id 
HAVING COUNT(DISTINCT CASE WHEN Tag in (1,2) THEN 1 ELSE 2 END) = 2  
+0

다른 2 개의 쿼리는 동적으로 생성 된 코드에 대해 더 단순 해 보입니다. (카테고리가 성장함에 따라 쿼리를 생성해야 함) 그러나 여전히 감사합니다. 너 모두 내 코드를 완성하도록 영감을 주었다. :) – user706087

+0

@user - 당신이 도움이된다고 당신이 논평 한 다른 두 사람은 저에게 일하지 않을 것 같습니다! –

관련 문제