【问题标题】:How can I join two tables when the join columns have different names?当连接列具有不同的名称时,如何连接两个表?
【发布时间】:2017-06-18 08:18:39
【问题描述】:

我有这两个表,我需要创建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)
);

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

【问题讨论】:

  • 与列名相同
  • 更大的问题是这些表中的哪两列 将用于执行连接。快速浏览一下,我并不清楚该问题的答案是什么。
  • @Lamak 厚颜无耻的评论,但不是很有建设性
  • @Bruno9779 我相信是的。 SQL Server 中不要求连接列的名称相同,因此响应是完全有效的。这个问题似乎假设列必须命名相同。
  • @Bruno9779 为什么不呢?,现在 op 可以搜索如何执行 JOIN 并用它来回答他/她的问题

标签: sql sql-server select join


【解决方案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】:

    您可以使用任何列名来加入(如果有意义的话)。通常主表为主键,明表为外键,wgich对应master:

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

    但是您想使用哪些列来连接这两个表?

    【讨论】:

      【解决方案3】:

      您需要在on 子句中指定列名:

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

      【讨论】:

        猜你喜欢
        • 2011-04-07
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 2011-12-12
        • 2012-01-09
        • 1970-01-01
        • 1970-01-01
        • 2015-10-29
        相关资源
        最近更新 更多