我不是 SQL 专家,如果我的问题听起来很愚蠢,请原谅。
我有一个多查找表:
ID ProID AmID
ID 是一个标识列,并在插入时自动生成 ID。 ProID 和 AmID 链接到候选表,位于其中的 ID 列上。
我需要创建一个 View ,它将在单个 View 中返回 Firstname Lastname AS Pro 和 Firstname Lastname AS Am,以及来自 Candidate 表的 ID。
ID Pro ProID Am AmID
1 Name Surname 1 Name Surname 2
2 Name Surname 3 Name Surname 78
etc
我为 pro 和 am 候选人创建了两个单独的 select 语句,但不知道如何将它们合并为一个语句?
SELECT T2.[ID],
T2.[Firstname] + ' ' + T2.[Lastname] AS 'Pro'
FROM [Teams] AS T1
INNER JOIN [Candidate] AS T2
ON T1.ProID = T2.ID
SELECT T2.[ID],
T2.[Firstname] + ' ' + T2.[Lastname] AS 'Am'
FROM [Teams] AS T1
INNER JOIN [Candidate] AS T2
ON T1.AmID = T2.ID
我查了一下,似乎我需要对此进行 RIGHT JOIN,但它搞砸了结果。
这种情况是否可能,或者我是否必须接受对 SQL 的两次不同调用?
最佳答案
基本上,您需要将 Teams
表上的表 Candidate
加入两次,这样您就可以获得每一列的等效值。
SELECT a.ID, b.ProID, c.AmID,
b.FirstName + ' ' + b.LastName as ProName,
c.FirstName + ' ' + c.LastName as AmName
FROM Teams a
INNER JOIN candidate b
ON a.ProID = b.ID
INNER JOIN candidate c
ON a.AmID = c.ID
如果其中一列是可空,LEFT JOIN
比INNER JOIN
更需要,因此不匹配的值仍会出现在列表中结果。
要全面了解联接,请访问以下链接:
创建VIEW
CREATE VIEW viewName
AS
SELECT a.ID, b.ProID, c.AmID,
b.FirstName + ' ' + b.LastName as ProName,
c.FirstName + ' ' + c.LastName as AmName
FROM Teams a
INNER JOIN candidate b
ON a.ProID = b.ID
INNER JOIN candidate c
ON a.AmID = c.ID
关于sql - T-SQL View 在一次检索中检索两个查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14620947/