2009-10-30 4 views
0

현재 다음 쿼리를 실행 중입니다.MySQL - 하나의 쿼리로 가능합니까?

SELECT * from people WHERE id = 4; 다음 표에

:

id  name   state age 
----------------------------------- 
1  tony jones  CA  22 
2  Sue Smith  FL  50 
3  Alex Guam  AL  44 
4  tony jones  SC  32 
5  tony jones  OH  12 
6  alex guam  RI  33 
7  tony Jones  CO  17 

내가 그 이름의 사람에 사는 것이 다른 국가의 목록을 반환하고 싶습니다 내 쿼리 예에 따라서

을 내가 ID를 4 있습니다. "tony jones"는 CA, OH, CO의 "other_states"목록을 받아야합니다.

하나의 쿼리에서 가능합니까 아니면 '이름'을 기반으로 한 사실 후에 별도의 선택을해야합니까?

+1

일반적인주의 사항 : 최대한 적은 수의 쿼리만으로 모든 작업을 수행하지 마십시오. 종종 여러 번 쿼리를 사용했을 때보 다 더 복잡하고 느려지는 경우가 있습니다. –

+0

나는 Josh를 확실히 듣는다. 그리고 제임스의 대답을 받아들이는 동안, 나는 그것이 2 쿼리보다 빠르지 않을지 궁금합니다. – k00k

답변

5

이것은 당신이 찾고있는 무엇을 줄 것이다 :

select t.id, 
     t.name, 
     t.age, 
     t.group_concat(distinct t.state order by t.state separator ', ') as other_states 
from the_table t 
    inner join the_table u on t.name = u.name 
where u.id = 4 
group by t.id, t.name, t.age 
0

두 번째 선택을 사용하십시오. 임시 테이블과 조인을 사용하여 무언가를 끌어낼 수는 있지만 필요한 정보를 얻기 위해 이와 같은 쿼리를 사용하는 것은별로 의미가 없습니다.

1
SELECT p1.* from people p1 
    JOIN people p2 ON p1.name = p2.name 
WHERE p2.id = 4 

은 지정된 이름과 일치하는 모든 행을 반환합니다.

0

한 가지 방법은 이름에 일치하는, 그 자체로 테이블을 조인 좌하는 것입니다. 더 나은 방법은 개별 사람들의 기록 (이름과 나이)을 분리하여 다른 테이블에 배치하는 것입니다. 그런 다음이 테이블에 방금 작성한 사람 테이블의 ID 번호를 포함시킵니다. 그런 다음 개인 레코드 id에 대해 두 테이블을 조인하고 하나의 조회 만 사용할 수 있습니다.

관련 문제