2017-04-20 4 views
0

私はデータベースに2つのテーブルを持っています。それらを "a"と "b"と呼ぶことができます。私はこれらのテーブルの両方に似たフィールドを持っています。どちらのテーブルでもプライマリキーではなく、データを一致させるために使用できます。データベース内の2つのテーブルのマッチングを行い、データをまとめて新しいテーブル/ビューにマッシュアップするにはどうすればよいですか?

"a"と "b"は完全に異なる種類のデータを含んでいます。 "a"には5つのフィールドがあり、 "b"には8つのフィールドがあります。私はlocaldbでSQL Server Expressを使用しています。

両方のテーブルからすべてのフィールドを取得し、両方のテーブルの類似フィールドの一致を確認してから、接続されたデータを新しいテーブルまたはビューのいずれかに配置する方法を教えてください。

テーブル ""

ID ClientID  ClientName  URL     SoftwareID 

    1  12345  Example 1  www.testuri.com  017AAA93o45B 
    2  13579  Example 2  www.google.com   029AAA93k32D 
    3  29384  Example 3  www.stackoverflow.com 022AAA93j22T 

テーブル "B"

ID ClientID  Username  Email     Phone   Software 

1  29384  User 1  [email protected]  02932 423834  Software 1 
2  29384  User 2  [email protected]  02134 234829  Software 2 
3  12345  User 3  [email protected]  01293 021924  Software 1 

"クライアントID" フィールドがあるものである:ここ

は、いくつかの例のデータであります両者の間で似ている。

+0

期待される出力でサンプルデータを追加 –

+2

これは結合を使用して行います。これはどのクエリの基礎でもありますので、このコンセプトを非常に快適にする必要があります。ここにはさまざまなタイプの素晴らしい表現があります。 http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ –

+0

この「共通フィールド」はプライマリキーではありませんが、どのテーブルでも一意であることが保証されていますか? (つまり「候補キー」)答えがノーならば、テーブル 'a'の' n'レコードが 'b'の' m'レコードと一致し、合計 'nxm '出力レコード。 –

答えて

1

これにより、myNewTableNameという新しいテーブルが作成され、両方のテーブルの各clientIdのデータが格納されます。新しく作成された表の列データ型は、元の列の列データ型と同じになります。

SELECT [a].[ID] AS [aID] 
    , [a].[ClientID] 
    , [a].[ClientName] 
    , [a].[URL] 
    , [a].[SoftwareID] 
    , [b].[ID] AS [bID] 
    , [b].[Username] 
    , [b].[Email] 
    , [b].[Phone] 
    , [b].[Software] 
INTO [myNewTableName] 
FROM [a] 
    INNER JOIN [b] 
     ON [a].[ClientID] = [b].[ClientID] 

あなたはこれがあなたの代わりに何をしたい、おそらくです(ビューを作ってみてくださいそして、それはしばしば変更されるので、この情報を永続的なテーブルをしたいが、一緒にこれらの列を表示して照会することができるようにしたくない場合冗長データを持つ別のテーブル)。

GO 

CREATE VIEW [dbo].[vw_myViewName] AS 
SELECT [a].[ID] AS [aID] 
    , [a].[ClientID] 
    , [a].[ClientName] 
    , [a].[URL] 
    , [a].[SoftwareID] 
    , [b].[ID] as [bID] 
    , [b].[Username] 
    , [b].[Email] 
    , [b].[Phone] 
    , [b].[Software] 
FROM [a] 
    INNER JOIN [b] 
     ON [a].[ClientID] = [b].[ClientID] 

GO 

通常のテーブルの場合と同じように、ビューから情報を選択できますが、クエリを実行して結果を表示します。

SELECT * 
FROM [dbo].[vw_myViewName] 
+0

これは頻繁に変更され、定期的に参照する必要があるデータであれば、ビューはより良いでしょう。 – BinaryPatrick

+0

@BinaryPatrickあなたは正しい、これはビューのための完璧な場所のように聞こえる。私は私の答えを更新しました – EMUEVIL

+0

@エエイビル詳細な答えをありがとう!しかし、私は誤っていくつかの重要な情報を逃してしまった。テーブル "b"には "ClientID"フィールドが複数存在するが、テーブル "a"には1つのインスタンスしか存在しない。この場合、この回答はまだ適用されますか? –

関連する問題