2013-08-12 7 views
0

좋아, 여러 테이블이있는 MySQL 데이터베이스가 있습니다. 테이블 중 하나 (테이블 A)는 나에게 가장 관심있는 항목이 있습니다.데이터 수정 작업을 수행하여 원하는 데이터를 얻으십시오.

type이라는 열과 entity_id이라는 열이 있습니다. 기본 키는 registration_id으로 현재 나와 관련성이 거의 없습니다.

궁극적으로 특정 type의 모든 항목을 수집하려고하지만 고유 한 entity_id을 갖고 싶습니다. 유일한 문제는 테이블 A의 entity_id이 고유 키가 아니라는 것입니다. 에 복수 registration_ids을 사용할 수 있습니다.

이제 entity_ids의 유일한 목록 (즉, 해당 테이블의 기본 키)이있는 다른 테이블 (테이블 B)이 있지만 해당 테이블의 type에 대한 정보는 없습니다.

그래서이 두 테이블에서 원하는 데이터를 얻는 가장 좋은 방법은 무엇입니까?

나는 테이블 A와 테이블 사이에서 첫 번째 테이블, 홀로 또는 아마도 일종의 조인 (나는 여전히 조인의 개념에 대해 처음이다)에서 사용할 수있는 일종의 (DISTINCT) B에서 테이블 B의 entity_id과 표 A의 type을 결합합니다.

지금 가장 효율적인 데이터베이스 작업은 무엇입니까? 그리고 내가 (결국은 지금 당장 시간이 없어서 아쉽게도) 데이터베이스 구조를 변경하여 효율성을 향상시켜야합니까?

누구에게도 추가 정보 나 그래픽이 필요한 경우 알려 주시기 바랍니다. 만약 내가 제대로 이해하고

답변

2

사용할 수 있습니다 GROUP BY

SELECT entity_id 
    FROM table1 
WHERE type = ? 
GROUP BY entity_id 

또는

SELECT DISTINCT entity_id 
    FROM table1 
WHERE type = ? 

DISTINCT는 여기이 당신을 위해 무엇을 찾고있는 생각 SQLFiddle 데모

+0

이전에 GROUP BY SQL 함수를 사용한 적이 없습니다. 나는 그것에 대한 문서를 조사해야 할 것이다. 그것에 대한 쿼리는 두 번째 조건보다 빠르며 더 많은 레코드에서 그 사실을 상상할 수 있습니다. –

+2

좋아요. 확실히 봐. SQL에서 그룹화 및 집계를 사용하기 시작할 수있는 좋은 기회 일 수 있습니다. FYI [대부분의 경우, DISTINCT 절은 GROUP BY의 특별한 경우로 간주 될 수 있습니다.예를 들어, 다음 두 쿼리는 동일합니다] (http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html) – peterm

0

입니다. 이것을 사용하여 하나의 (고유 한) entity_id 유형 만 제공하십시오. 여기

SELECT type , count(entity_id) 
    FROM table1 
GROUP BY type 
HAVING COUNT(entity_id)=1 

SQL Fiddle

+0

내가 이것을 가지고 : 그룹 함수의 잘못된 사용 : 선택 유형, 카운트 (entity_id) FROM table1 WHERE count (entity_id) <2 –

+0

네, 깨달았습니다. 아프지 말고 게시하십시오. – woofmeow

+0

이 @AndrewAlexander를 시도해보십시오.이 작업이 작동하며 고유 한 entity_ids를 제공합니다. 또한 ' count (enity_id)'를 확인하는 것입니다. – woofmeow

1

표 비싼 연산 조인이다. 큰 데이터 세트를 다루는 경우 조인 작업을 실행하는 데 걸리는 시간은 무시할 수 없습니다.

다음 SQL 문은 모든 entity_id를 가져 와서 유형별로 그룹화합니다. 따라서 각 entity_id에 대해 각 유형의 1 개만 결과 집합에 포함됩니다.

SELECT type, entity_id FROM TableA GROUP BY type, entity_id; 
관련 문제