2009-05-03 3 views
0

한 데이터베이스에서 다른 데이터베이스로 데이터를 복사하고 있으며 데이터를 받으면서 마사지하고 있습니다. 두 데이터베이스 모두 클라이언트 및 작업이라는 테이블이 있습니다.다른 테이블의 조회를 포함하도록 SQL select 문을 작성하려면 어떻게해야합니까?

그러나 데이터베이스 "Alpha"에서 작업 테이블은 데이터베이스 "Epsilon"이 수행하는 클라이언트 테이블과의 관계가 없습니다. Alpha 's Jobs 테이블은 클라이언트 이름이 nvarchar 열에 있습니다.

엡실론의 작업 테이블에 클라이언트 테이블을 삽입 할 때 클라이언트 테이블의 클라이언트 ID를 이름별로 조회하려면 select 문이 필요합니다. 있도록

insert into Epsilon.dbo.Jobs (ClientId, Name, Location, DateCreated) 
    select ????, Name, Location, DateCreated from Alpha.dbo.Jobs 

가 어떻게이 수정할 수

???? :

내 미완성 SQL 문은 다음과 같습니다 Epsilon의 클라이언트 테이블에있는 ClientId가 포함되어 있습니까? 나는 Job의 Name 열을 사용하여 데이터를 조회해야한다는 것을 알고 있지만이 구문을 이해할 수는 없다. Epsilon.dbo.Jobs (클라이언트 ID, 이름, 위치 DateCreated)에

+0

분명히 질문에 가장 적합한 답변을 선택할 수 있지만 선택한 답변은 내가 게시 한 지 7 분 후에 게시되었습니다. –

답변

2
insert into Epsilon.dbo.Jobs (ClientId, Name, Location, DateCreated) 
    select c.ClientID, a.Name, a.Location, a.DateCreated from Alpha.dbo.Jobs a 
    join Epsilon.dbo.Client c on c.Name = a.ClientName 

이 꽤 낙관적 가입하지만, 심지어이 당신에게 일반적인 아이디어를 줄 것이다 그것을 수정해야하는 경우와 같은 클라이언트.

+0

+1하지만 윌은 기본적으로 몇 분 전에 동일한 답을주었습니다. 그래서 체크 표시가 나타납니다. 응답 해 주셔서 감사합니다. –

+0

내가 게시 한 지 7 분 후에 답변이 게시됩니다. –

+0

Doh!어리석은 두뇌는 여전히 작동하지 않습니다. 나쁜 두뇌, 나쁜! –

1

삽입 Epsilon.dbo 가입 J 내측으로 Alpha.dbo.Jobs c.ClientId에서, 이름, 위치를 선택 DateCreated . 에 C (j.ClientId = c.ClientId)

+1

그는 Alpha.dbo.Jobs에 ClientID가 없습니다. –

+0

+1에 충분히 가깝습니다. 그 작은 미끄러짐을 제외하고는 다른 대답과 동일했습니다. :) –

3

필요한 것은 조인입니다. 조인은 시작시 거의 모두가 생각하는 것과는 달리 데이터베이스 스키마에 정의 된 관계가 필요하지 않습니다. 비교할 두 열의 유형이 같아야합니다 (편집 의견보기).

질문은 당신이 원하는 조인입니다. 정의 된 관계가 없으므로, 작업 및 클라이언트가없는 클라이언트와 그렇지 않은 클라이언트 및 작업이있는 작업이있을 수 있습니다.

존재하는 모든 작업을 원한다고 가정하고 ClientId가 CLIENTS 테이블과 일치하는 곳에서 ClientId를 가져오고 그 관계가 존재하지 않으면 ClientId를 null로 남겨 둡니다. LEFT JOIN으로이 작업을 수행 할 수 있습니다. Jobs LEFT JOIN 클라이언트는 LEFT의 모든 레코드를 가져 오며, 오른쪽의 클라이언트와 정의 된 관계가없는 경우에도 마찬가지입니다. 우리는이 두 가지를 뒤집을 수 있고 올바른 조인을 할 수 있습니다.하지만 사람들이 일반적으로하는 것은 아닙니다. 다른 유형의 조인 및 작동 방식에 대해 읽으 려합니다.

select ClientId, Name, Location, DateCreated 
from Alpha.dbo.Jobs as J LEFT JOIN 
    Alpha.dbo.Clients as C ON j.ClientName = c.ClientName 

Jobs.ClientName가 c.ClientName와 동일한 데이터 유형이 아닌 경우, 당신은 각 라인에 그들을 가져 오는 쿼리를 실행하기 전에 스키마를 편집 할 수 있습니다처럼

그래서 당신의 선택 문이 보일 것이다 다른.

+2

"비교하는 두 열의 유형이 같아야합니다." 이것조차도. 각 테이블에서 최소한 하나의 열을 가져 와서 부울로 반환/평가할 수있는 연산자 또는 함수가 있습니다. – tpdi

+0

+1 실제 데이터 ..... – Will

관련 문제