아주 간단한 질문입니다. 내가하고 싶은 일은 하나의 테이블에서 모든 열을 선택하고 다른 테이블에서 하나의 열 (여러 개의 일치하는 행을 가질 수 있음)을 선택하는 것입니다.집계가있는 다중 테이블 조인 (mssql/sql 서버)
예 :
table ta (eid, uid, name, year, etc, etc, etc)
table tb (eid, uid, name, year, amount, etc, etc)
eid
- 두 테이블 사이에 일치하지 않습니다 uid, name, year
- 간단한
그래서 나는 테이블 ta
에서 모든 열을 빼 할 두 테이블에 걸쳐 일치 :
select * from ta where eid='value';
테이블 tb
에서 금액 열에 가입하고 싶습니다. y 결과 집합, 간단 :
select a.*, b.amount
from ta a
inner join tb b on a.year=b.year
where a.eid='value';
멋지다. 하지만 테이블 tb에 여러 행이 있으면 어떻게됩니까?
그래서 내가 추가 :Column 'ta.eid' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
select a.*, sum(b.amount)
from ta a inner join tb b on a.uid=b.uid
where a.year='value';
나에게 다음과 같은 오류를 제공합니다 :
select a.*, sum(b.amount)
from ta a inner join tb b on a.uid=b.uid
where a.year='value' group by ta.uid;
을 그리고 난 같은 오류가
실행!
그러나, 나는 내 쿼리를 변경하는 경우 :
select a.uid, a.year, sum(b.amount)
from ta a inner join tb b on a.uid=b.uid
where a.year='value'
group by ta.uid, ta.year;
그것은 작동하지만, 지금은 그 대신 내가 원하는 모든 열의 세 개의 열이 있습니다.
그래서이 시점에서 내 질문이됩니다 : 나를 수동으로 GROUP BY 절을 사용하여 두 테이블에서 끌어 오기 원하는 모든 열을 입력하는 이외의이 쿼리 구조화 더 나은, 깨끗한 방법 있습니까?
이 (http://sqlblog.com/blogs/aaron_bertrand/를 [이 생산 코드에'SELECT * '를 사용하는 것은 좋은 방법이 아닙니다] 아카이브/2009/10/10/bad-habits-to-kick-using-select-omitting-the-column-list.aspx) 쿼리 작성시 30 초를 절약 할 수 있지만 장기적으로는 더 많은 비용이 발생할 수 있습니다. – GarethD
하나의 테이블에서'Select * '를 사용하는 이유는 97 %의 컬럼이 데이터베이스의 테이블 레코드를 업데이트하는 업데이트 폼으로 채워지기 때문입니다. – iiminov
사실 제 질문은 의미가 있습니까? 조금 더 정교하거나 더 나은 테이블 열 구조 또는 다른 것을 제공해야합니까? – iiminov