2011-01-06 2 views
0

은 내가, 내가 ... 내가 쿼리 경우 4에 연결 만 4를 가지고 name_id.error가 6 term_id를 얻을 수 있도록 내가 쿼리를 원하는이MySQL의 쿼리 도움

id | term_id | name_id 
1 | 4  | 1 
2 | 6  | 1 
3 | 5  | 2 
4 | 6  | 2 
3 | 4  | 3 
4 | 6  | 3 

같은 테이블과 데이터를 6,2 더 named_id은 모두 세에 부착되지 않기 때문에 그것은 나에게 아무것도 표시되지 않아야 또는 비은 무엇인가 명확히하기 위해 같은 4

답변

2
SELECT Name_ID 
FROM Table1 t 
WHERE term_id IN (4,6) 
GROUP BY NAME_ID 
HAVING COUNT(*) = 2 
+1

를 얻을하지만 난 몇 가지를 원한다 like와 같은 성명을 보여 주겠다. 4와 6이 아닌 이름을 보여 주거나 4 또는 6을 표시한다. 왜냐하면 4와 6을 넣었고 2는 아무 것도 보여서는 안되기 때문이다. –

+0

이것은 name_id와 term_id가 모두 같은 두 행에 대해 name_id를 반환한다. 1,4,2), (2,4,2)'. 그건 맞지 않아. – Ishtar

0
select 
     name_id 
    from 
     YourTable 
    where 
     term_id = 4 or term_id = 6 
    group by 
     name_id 
    having 
     count(*) = 2 

(5)을 가지고 있기 때문에 4,5처럼 아무것도 표시되지해야 일어나면, 당신은 "GROUP BY "및"HAVING "컨텍스트. Group by는 SQL 쿼리가 "Group By"절로 식별하는 열에 따라 많은 수의 레코드를 그룹화하도록합니다. 이것은 단지 쿼리에서 동일한 단일 열일뿐입니다.

다음으로 HAVING 절은 모든 레코드가 사전 규정되고 포함 된 후 그룹의 최종 결과를 기반으로합니다. 이 경우 자격을 갖춘 레코드의 COUNT (*)를보고 있습니다. 2

두 가지 용어와 관련된 Name_ID가 염려되었으므로 ID가있는 이름이 필요합니다. 둘 다에서 발견 ... 그러므로 WHERE 절의 OR 조건. 우리는 사람이 4 또는 6과 연관된 레코드를 원합니다. 결과에서 단 하나의 레코드 (4 또는 6 만)가 발견되면 COUNT () 값은 1과 같아서 결과 세트에서 삭제됩니다 ... 두 개의 단어 모두와 함께 자격을하는 사람들은 ...

는이 쿼리를 같이하려고 할 수 있습니다 무엇을, 그렇지 않으면 보려면 ... 카운트 () = 최종 결과에 포함하여 2있을 것입니다

select 
     name_id, 
     count(*) as TotalTermsPerName 
    from 
     YourTable 
    group by 
     name_id 

귀하의 데이터에 따라 최소 1 개의 용어로 된 모든 이름 ID와 10 개의 용어를 가질 수있는 다른 ID를 얻을 수 있습니다. 원래 쿼리는 4와 6의 조건 만 고려 했으므로 도달 할 수있는 최대 개수는 최대 2가됩니다.

쿼리가 응답하고 HOW 사상의 기초가 이해되지 않고 도움이되기를 바랍니다. 작업.

+0

당신의 쿼리가 틀린 것은 "or"문인 – cristian

+1

에 의해 그룹 뒤에 놓여 야하지만 4와 6이 아닌 4 나 6의 이름을 보여 주겠다. 4와 6과 2를 넣었으므로 나에게 아무 것도 보여 주면 안된다 –

+0

@ user499703, 설명을 위해 개정 된 답변을 참조하십시오. – DRapp

0
SELECT DISTINCT name_id 
FROM t 
WHERE 
    term_id = 4 
    AND 
    name_id IN (SELECT name_id FROM t WHERE term_id = 6) 
+0

미안하지만 내가 무엇을 찾고 있는데요 –

1

(난 당신이 원하는 것을 이해하는 경우)이 그것입니다 :이 쿼리를 실행하면

SELECT t1.name_id 
FROM table1 t1 
INNER JOIN table1 t2 ON t1.name_id=t2.name_id 
WHERE (t1.term_id = 4 AND t2.term_id=6) OR (t1.term_id = 6 AND t2.term_id=4) 
GROUP BY name_id;

내가 "또는"문입니다

 
+---------+ 
| name_id | 
+---------+ 
|  1 | 
|  3 | 
+---------+ 
+0

이게 당신의 자기 그것을 시도하지 않습니다 –

+0

내 대답과 같은 결과. @ user499703 당신이 원하는 것은 무엇입니까? – Ishtar

+0

우선 내가 위대한 도움을 주신 것에 대해 감사 드리고 싶습니다 ... 저는 그저 원하는 term_id를 가진 name_id의 모든 데이터를 가져오고 싶습니다 .....4와 6 term_id가있는 name_id를 원한다면 term_id가 아니라면 4와 6을 검색하고 2는 아무것도 표시하지 말아야합니다 –