2

如果我的问题听起来很愚蠢,我不是 SQL 专家,所以请原谅。

我有一个多重查找表:

ID ProID AmID

ID 是一个标识列,并在插入时自动生成 ID。ProID 和 AmID 链接到候选表中的 ID 列。

我需要创建一个视图,它将在单个视图中返回 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 的两个不同调用?

4

2 回答 2

4

您基本上需要Candidate在您的表格上加入Teams表格两次,以便您可以获得每列的等效值。

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

如果其中一列是nullableLEFT 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
于 2013-01-31T08:02:17.667 回答
2

试试这个UNION来得到你所有的结果:

SELECT 
   C.Id, 
   C.FIrstName + ' ' + C.LastName as Pro,
   'Pro' Type
FROM Teams T
   JOIN Candidates C ON T.ProdId = C.Id
UNION
SELECT 
   C.Id, 
   C.FIrstName + ' ' + C.LastName as Am,
   'Am' Type
FROM Teams T
   JOIN Candidates C ON T.AmId = C.Id

如果您希望它们在单独的列中,那么这应该有效:

SELECT 
       C.Id as ProdId, 
       C.FIrstName + ' ' + C.LastName as Pro,
       C2.Id as AmId,
       C2.FIrstName + ' ' + C2.LastName as Am
    FROM Teams T
       JOIN Candidates C ON T.ProdId = C.Id
       JOIN Candidates2 C ON T.AmId = C.Id

最后一点,根据您的 RDBMS,如果您需要在第一列中使用计数器,请考虑将 ROW_NUMBER() 用于 SQL Server 或 Oracle,或者为 MySQL 声明您自己的变量。

祝你好运。

于 2013-01-31T08:01:40.113 回答