当连接列具有不同的名称时,如何连接两个表?

时间:2017-02-01 14:31:17

标签: sql sql-server select join

我有这两个表格,我需要创建一个PhraseIdEnglish的报告,UserName'admin1'

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)
);

当连接列具有不同的名称时,如何连接这两个表?

3 个答案:

答案 0 :(得分: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 :(得分:1)

我会通过将AspNetUsers加入Phrase表来实现此目的。这将允许所有用户出现在报告中,即使他们没有匹配的短语信息。请注意,COALESCE()用于适当地处理给定用户的丢失信息(如果发生)。在这种情况下,我们针对特定用户,但如果短语信息丢失,这种方法至少会导致结果集中显示单个记录。

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'

答案 2 :(得分:1)

您可以使用任何列名进行加入(如果有意义)。通常,它是主表的主键,而详细表是外键,wgich对应master:

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

但是你想用哪些列加入这两个表?