sql - T-SQL View 在一次检索中检索两个查找

标签 sql sql-server tsql view

我不是 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 JOININNER 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/

相关文章:

sql - 恢复没有数据的数据库

mysql - 链接服务器 - 可以看到表但看不到列

mysql - 通过映射表选择值。

java - SQL Server 连接被拒绝且 jTDS 驱动程序无法工作

mysql - SQL "In"语句返回 6 条记录...总体 SQL 语句返回 22 条记录

mysql - 将表更新为另一个表中的最后一个 ID

sql - "AND"SQL Server中的操作执行方法

sql-server - BCP 语法问题

sql - 程序性能。 SQL Server、Dynamics AX 2012 R3 CU10

sql - 使用 INSERT INTO 插入多个值 (SQL Server 2005)