2013-10-08 2 views
0

SQL 바이올린을 반복 할 때마다 항목에 대한 ID 열을 얻으려면 ->http://sqlfiddle.com/#!2/28938/9간단한 MySQL의 자체 쿼리에 가입

나는이 같은 테이블이 있습니다

+------+----------+--------+ 
| id | group_id | letter | 
+------+----------+--------+ 
| 1 | 44  | a  | 
| 2 | 55  | a  | 
| 3 | 44  | b  | 
| 4 | 55  | c  | 
| 5 | 44  | c  | 
| 6 | 55  | d  | 
+------+----------+--------+ 

을 그리고 내가 어떤 문자를 선택합니다 해당 글자가있는 두 개 이상에 group_ids를 더한 개수가 있습니다.

다음
SELECT b.id AS idx, a.id AS idy, a.letter FROM (
    SELECT id, letter, COUNT(1) AS count 
    FROM temp WHERE group_id = 55 
    OR group_id = 44 
    GROUP BY letter 
) AS a 
JOIN temp AS b ON a.letter = b.letter 
WHERE a.count > 1 
AND group_id = 55 

내 원하는 결과 것 : 여기 내가 일하고 있어요 쿼리의

+-----+-----+--------+ 
| idx | idy | letter | 
+-----+-----+--------+ 
| 2 | 1 | a  | 
| 4 | 5 | c  | 
+-----+-----+--------+ 

그러나 불행하게도 이것이 내가

+-----+-----+--------+ 
| idx | idy | letter | 
+-----+-----+--------+ 
| 2 | 1 | a  | 
| 4 | 4 | c  | 
+-----+-----+--------+ 

을 얻고 무엇을 어떻게 ID를 보장 할 수 올바른 열에 있습니까?

감사합니다.

+0

쿼리를 실행하십시오. 그것들은 열 별칭입니다. – RachelC

+0

'a'에 대한 레코드가 3 개있는 경우 – zod

+0

@zod 원하는 결과가 내 질문에 깔끔한 작은 테이블에 있습니다. – RachelC

답변

0

레이아웃과 관련하여 원하는 것은 아니지만 4 개의 입력란을 반환합니다. 내부 쿼리가 id # 5가되지 않기 때문에 위의 쿼리가 작동하지 않습니다. 아래의 수정 된 쿼리가 있지만 해킹을 느낍니다.

SELECT 
     MAX(IF (b.group_id = 55, b.id, -1)) as idx, 
     MAX(IF (b.group_id = 44, b.id, -1)) as idy, 
     b.letter 
FROM 
    temp b 

INNER JOIN (
    SELECT 
     letter, group_id, COUNT(1) AS count 
    FROM temp WHERE group_id = 55 
    OR group_id = 44 
    GROUP BY letter 
    HAVING count > 1 
) a ON (b.letter = a.letter) 

GROUP BY letter 
+0

두 레코드 모두 id가 필요합니다. id 열로 별명을 idx로 바꾸고 idy에게 도움을 주었다. – RachelC

+0

업데이트 된 쿼리는 SQL Fiddle (http://sqlfiddle.com/#!2/28938/55)에서 작동합니다. 도움이되기를 바랍니다. idx는 id_group_55 등을 의미합니다. –