2009-05-03 6 views
0

あるデータベースから別のデータベースにデータをコピーしているうちにデータをマッサージしています。両方のデータベースには、クライアントとジョブと呼ばれるテーブルがあります。別のテーブルからの検索を含めるには、どのようにSQL select文を書くことができますか?

ただし、データベース "Alpha"では、ジョブテーブルは、データベース "Epsilon"のようなクライアントテーブルとの関係はありません。 Alpha's Jobsテーブルは、nvarcharカラムにClientsという名前を持つだけです。

私はそれをEpsilonのJobsテーブルに挿入している間に、ClientテーブルのClient IDを名前で検索するためにselect文が必要です。

マイ未完成のSQL文は次のようになります。

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

ように、どのように私はこれを変更することができます???? EpsilonのClientsテーブルのClientIdが含まれていますか?私はジョブの名前列を使用してデータを検索する必要があることを知っていますが、これの構文を理解することはできません。 Epsilon.dbo.Jobs (ClientIdを、名前、場所、 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

あなたが必要とするのは参加です。ジョインは、始めるときに皆が考えるものとは逆に、データベースのスキーマに定義された関係を必要としません。彼らは、比較している2つの列が同じタイプ(editのコメントを参照)であることを要求します。

質問はあなたが望むものですか?関係が定義されていないため、ジョブとクライアントを持たないクライアントと、存在しないクライアントとジョブを持つジョブが存在する可能性があります。

私はあなたが存在するすべての仕事を望んでいると仮定し、ClientIdがCLIENTSテーブルと一致する場所でClientIdを持ち込み、その関係が存在せずClientIdをnullのままにします。 LEFT JOINでこれを行うことができます。ジョブLEFT JOINクライアントは、右のクライアントと定義された関係が存在しない場合でもLEFTのすべてのレコードを持ち込みます。私たちは2つを逆にして右のジョインを行うことができますが、それは人々が通常行うことではありません。私は他のタイプの結合やその働きを読んでおきます。

だからあなたのselect文は次のようになります。Jobs.ClientNameはc.ClientNameと同じデータ型でない場合は、それぞれに沿ってそれらをもたらすために、クエリを実行する前に、スキーマを編集することができ

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

その他。

+2

"比較している2つの列の型が同じである必要があります。これもありません。各テーブルから少なくとも1つの列を取り、ブール値に戻ったり評価したりする演算子や関数があります。 – tpdi

+0

+1真実..... – Will

関連する問題