我有这两个表格,我需要创建一个PhraseId
和English
的报告,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)
);
当连接列具有不同的名称时,如何连接这两个表?
答案 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
但是你想用哪些列加入这两个表?