2017-02-01 12 views
2

私はこれら2つのテーブルを持っており、PhraseIdEnglishのレポートを作成する必要があります。UserName'admin1'です。結合列の名前が異なる場合、2つの表を結合するにはどうすればよいですか?

ModifiedByの列は、Idの列と一致します。

CREATE TABLE [dbo].[Phrase] (
    [PhraseId]  UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    [English]  NVARCHAR (250) NOT NULL, 
    [ModifiedBy] INT    DEFAULT ((1)) NOT NULL, 
    PRIMARY KEY CLUSTERED ([PhraseId] ASC), 
    CONSTRAINT [FK_PhrasePhraseChapter] FOREIGN KEY ([ChapterId]) REFERENCES [dbo].[PhraseChapter] ([PhraseChapterShortId]) 
); 

CREATE TABLE [dbo].[AspNetUsers] (
    [Id]     INT   IDENTITY (1, 1) NOT NULL, 
    [UserName]    NVARCHAR (256) NOT NULL, 
    CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

結合列の名前が異なる場合、これら2つの表を結合するにはどうすればよいですか。

+7

列名が同じである場合と同じ – Lamak

+2

大きな問題は、これらのテーブルの2つの列が結合の実行に使用されることです。その質問に対する答えが一目瞭然ではわかりません。 –

+0

名前の違いは何も変わりません。テーブルが相互に関連している限り、関連する列に参加します。 – Snowlockk

答えて

1

あなたはon句でカラム名を指定する必要があります。

SELECT p.[PhraseId], p.[English] 
FROM [dbo].[Phrase] p 
JOIN [dbo].[AspNetUsers] a ON p.[ModifiedBy] = a.[Id] 
WHERE a.[UserName] = 'admin' 
1

私は左PhraseテーブルへAspNetUsersに参加することによって、この近づくだろう。これにより、一致するフレーズ情報がなくても、すべてのユーザーがレポートに表示されます。与えられたユーザーの欠落した情報を適切に処理するためには、COALESCE()が使用されることに注意してください。この場合、特定のユーザーをターゲットにしていますが、このアプローチでは、フレーズ情報が失われても、結果セットに1レコードしか表示されません。

SELECT t1.[Id], 
     t1.[UserName], 
     COALESCE(t2.[PhraseId], -1) AS PhraseId, 
     COALESCE(t2.[English], 'NA') AS English 
FROM [dbo].[AspNetUsers] t1 
LEFT JOIN [dbo].[Phrase] t2 
    ON t1.[Id] = t2.[ModifiedBy] 
WHERE t1.[UserName] = 'admin1' 
1

任意の列名を使用できます(意味がある場合)。

select * from 
Table1 t1, Table2 t2 
where t1.id=t2.ref_id 

しかし、列は、これらの2つのテーブルを結合するために使用したい:通常、それはマスターに対応wgichマスターテーブルの主キー、および詳細テーブルの外部キー、ありますか?

関連する問題