2013-12-16 1 views
1

MySql 5를 사용하고 있으며 SQL 구문을 사용하여 후속 값을 가져올 수 있는지 알고 싶습니다. 있습니다일반적인 열 값을 사용하여 행 값을 가져 오는 SQL 구문

가져 오기 값 노드 그룹 1은 마스터 목록, 내가 모든 호스트가 그룹입니다 1에 포함 얻을 필요가 평균은 1 군과도 2 군과

Hosts | groups 
    1  1 
    1  2 
    1  3 
    2  1 
    3  1 ----->for this example host 1 and 3 are the value which I need 
    3  2 
    3  3 
    4  1 
3. 포함 그룹 2 및 그룹 3에도 포함하십시오.

가능한 경우 누군가에게 예제를 제공 할 수 있습니까?

+0

지금까지 어떤 SQL을 사용해 보셨습니까? –

답변

2

대답은 group by hosts having count(distinct groups) = 3으로 자주 언급되며 올바른 답변을 제공합니다. 그러나 다음 쿼리도 작동하며 적절한 인덱스가 있으면 대개 훨씬 더 잘 수행됩니다. 회상하면 인덱스는 (hosts,groups)이어야합니다.

SELECT t1.hosts 
FROM MyTable AS t1 
INNER JOIN MyTable AS t2 USING (hosts) 
INNER JOIN MyTable AS t3 USING (hosts) 
WHERE (t1.groups, t2.groups, t3.groups) = (1, 2, 3) 

이 유형의 쿼리에 대한 일부 분석은 내 프레젠테이션 SQL Query Patterns, Optimized을 참조하십시오.

+0

대단한 일입니다 !! 하지만 이제는 내부 테이블을 조인하여 최종 목록의 모든 행에 대해 새 값 "nodeName"을 얻으려고합니다 ... 내가하려는 일을보기 위해 코드를 업데이트 할 것입니다. – Sallyerik

+0

그래, 해결, 그냥 새로운 내부 값을 새 테이블 값으로 조인을 만들어야합니다. 시간 내 주셔서 감사합니다. 프레 젠 테이 션 btw 위대한 다시 주셔서 감사합니다. – Sallyerik

3

당신은 WHERE, GROUP BYHAVING의 조합을 사용하여 결과를 얻을 수 있어야합니다 : 당신이 뭔가를 시도 할 수

select hosts 
from yourtable 
where groups in (1, 2, 3) 
group by hosts 
having count(distinct groups) = 3; 

SQL Fiddle with Demo

+0

그것은 작동합니다. 나는 그것이 내게 잘 들어 맞음에 따라 내적인 조인 응답을 선택했다. – Sallyerik

1

를 참조하십시오

select distinct Hosts 
from myTABLE 
where Hosts in (
    select Hosts from myTABLE where Groups = 1) 
AND Hosts in (
    select Hosts from myTABLE where Groups = 2) 
AND Hosts in (
    select Hosts from myTABLE where Groups = 3) 
Order by Hosts 
+0

잘 작동합니다 .. 감사합니다! – Sallyerik