나는이 개 테이블이 :효율적인 방법
Service_BD :
LOB :
지금에 대한 요구 사항이 industryId 등의 LOB 테이블에 중복 열을 삭제하고 Service_BD 테이블을 사용하여 industryId 및 th에 대한 LOB를 가져옵니다. LOB 테이블을 사용하여 특정 LOB의 세부 사항을 가져옵니다.
내부 조인을 사용하여 단일 SQL 쿼리를 가져 오려고하지만 결과가 이상합니다. 나는이 같은 간단한 SQL 쿼리를 실행할 때
가 :
SELECT industryId, LobId
FROM Service_BD
WHERE industryId = 'I01'
GROUP BY lobId
결과는 9 행입니다 : 이제
, 나는 (마이너스 LOB 컬럼의 나머지에 가입 하시겠어요 물론 떨어 뜨린 것들) LOB 세부 사항을 가져올 수 있습니다. 그래서 아래의 쿼리를 사용
SELECT *
FROM LOB
INNER JOIN Service_BD ON Service_BD.lobId = LOB.lobId
WHERE Service_BD.industryId = 'I01'
GROUP BY Service_BD.lobID
내가 원하는 결과를 얻고을하지만, 이것이 가장 효율적인 방법인지 아닌지 나는 의심의 여지가있다. 나는 Service_BD와 LOB 테이블 모두에 엄청난 양의 데이터가 있기 때문에 의심 스럽지만 WHERE
조건의 복잡성을 줄이기 위해 먼저 GROUP BY Service_BD.lobID
을 수행하면 감각이 생깁니다.
이 방법이 쿼리를 작성하는 올바른 방법인지 또는 동일한 방법을 사용하는 것이 더 좋은지 알고 싶습니다.
검색어가 맞습니다. 약간 속도를 높이기 위해 할 수있는 한 가지는'JOIN' 절에서 'INNER JOIN Service_DB ON ServiceDB.lobID = LOB.lobID AND Service_DB.IndustryId ='I01 '과 같이'WHERE' 조건을 이동하는 것입니다. 그러나 이것은 당신이 사용하고있는 RDBMS에 의존 할 수도 있습니다. –
쿼리에 GROUP BY 절에 언급되지 않은 SELECT 절의 열이 포함되어 있기 때문에 MySQL - AFAIK가 아닌 것 같습니다. 다른 RDBMS에도이 "이상한"기능이 있습니다. –
@FrankSchmitt :'lobID'가 기본 키 (또는 고유 키) 인 경우 실제로 유효 (표준) SQL이고 Postgres에서도 작동합니다 (http : // stackoverflow).com/q/27561914/330315 –