2017-04-07 2 views
0

Customer-Age, Customer-Street, ..., Customer-OtherField와 같은 많은 표가 있습니다. Customer-Age-Street -... - OtherField와 같이 쉽게 하나의 표로 가져오고 싶습니다. 내가 현재 사용하고 있습니다 :SQL Server : 동일한 ID를 가진 여러 테이블을 결합하는 편리한 방법은 무엇입니까?

SELECT a.Customer, a.Age, b.Street,..., x.OtherField 
FROM table1 a, table2 b,..., tableX x 
WHERE a.Customer=b.Customer =c.Customer=d.Customer =... =x.Customer`. 

내가 공통 식별자 Customer와 테이블을 조인하는 더 간단하고 편리한 방법을 싶어.

SQL Server 2014에서 공통 식별자가있는 여러 테이블을 편리하게 결합하는 방법은 무엇입니까?

+2

아무 것도 없습니다. 실제로 조인을 더 조목조림해야합니다. '조인 ... on ...'그리고 다른 테이블에 나이가있는 등 - 요점은 보이지 않지만 막연한 예제로 인해 나타날 수 있습니다. –

+0

이것은 분명 할 수 있습니다. , 모든 조인을 작성하고 싶지 않다면 뷰 생성 UI를 사용하여 테이블을 선택할 수 있으며 테이블 선택에 따라 자동으로 쿼리를 생성해야합니다 – TheUknown

답변

4

지금하고있는 방식이 가장 "편리한"것이지만 최적이 아니므로 두통이 길어질 수 있습니다. 우연히 교차 결합을하기가 너무 쉽고 불필요한 조건이있는 WHERE 절이 혼란 스럽습니다.

더 나은 선택은 JOIN ON 구문을 사용하는 것입니다

SELECT a.Customer, a.Age,b.Street,...,x.OtherField 
FROM 
table1 a 
INNER JOIN table2 b ON a.Customer = b.Customer 
INNER JOIN table3 c ON b.Customer = c.Customer 
INNER JOIN tableX x on c.Customer = x.Customer 

이 코드를 정리하고 쉽게 오히려 WHERE 절 문이되고있는 파악하는 것보다,에 가입하는 것을 알 수 있습니다 테이블을 조인하는 데 사용되며 쿼리 결과를 제한합니다. 타이핑하기가 더 이상 짜증나지 않습니다. 단지 모든 편지를 다른 장소에 넣는 것뿐입니다.

+1

테이블 별칭 ('a, b , x'). 설득력없는 이유가 없다면 원래 이름을 항상 사용해야한다고 생각합니다. – Dai

+0

@Dai 좋은 지적입니다. 습관의 힘, 우리의 내부 코딩 표준에서 별칭을 지정하지 않으면 매번 테이블의 정규화 된 이름을 사용해야합니다. 손목과 정신을 보호하기 위해 별칭을 사용합니다. :) – mallan1121

+0

왜 그것이 정책입니까? DBMS는 ({schemaName}. {tableName}'을 의미한다고 가정 할 때) 정규화되지 않은 경우에도 정확하게 이름을 바인딩 할만큼 똑똑합니다. 의도적으로 십자가를 만들면 스키마 이름 만 지정하면됩니다. -schema 참조. 필자는 스키마 규정 이름이 있으면 쿼리 컴파일이 빠르다고 믿는 카고 컬트가 있지만 그 개념을 지원하는 벤치 마크는 보지 못했다고 생각합니다. 그리고 {{databaseName}. {schemaName}. {tableName}'을 사용하여 지정할 필요가 없기를 바랍니다. – Dai

0

INNER가 t.Customer = t1.Customer INNER t1.Customer가 ON T2 AS 표 2 가입 = ON T1 AS 표 가입 t2.number 테이블 t AS SELECT t.Customerid, t1.Age, t1.Street, t2.Customer

이것은 기본적으로 말하기에 깔끔한 방법입니다. 별칭은 열 이름을 더 읽기 쉽게 만들어주는 데 자주 사용되며 여러 테이블이있는 경우 혼동을 피하기 위해 자주 사용되므로 매우 중요합니다.