使用相同的记录集信息抓取 sql 中的列名称

Grabbing name of column in sql using the same recordset information

这是我在 SQL 中的 table 和一些示例数据

id     cName             sub
---    ----             -----
1      ABC Company        0
2      Smith's Inc.       0
3      Ing Inc.           2

我想做的是使用一个 SQL 语句,如果有一个子记录集,它会给我一个记录集子项的名称,如果没有,则给我破折号或其他东西。我试过这样做但没有用。

SELECT cName,(
    SELECT cName 
    FROM table1 tbl 
    WHERE tbl.clientID=tbl.sub) as pName 
WHERE ID=3

结果应该是这样的

Ing Inc., Smith's Inc

真实查询如下所示:

"SELECT cName,(
        SELECT tbl.cName 
        FROM CSA.dbo.clients tbl 
        WHERE tbl.clientID=tbl.sub) as pName, 
 FROM clients cl 
 INNER JOIN CSA.dbo.Clients c 
 ON c.clientID=cl.clientID WHERE cl.clientID=3" 

Sub 实际上并不存在于 cl (clients) table 中,而是存在于另一个名为 clients (c) 的数据库 table 中。

这似乎对我不起作用。有什么想法吗?

我想你的查询应该是这样的:

SELECT t.cName,
    (SELECT cName FROM table1 tbl WHERE tbl.ID=t.sub) as pName
from table1 as t
WHERE t.ID=3

你可以在 clientID = sub 上做一个 SELF-JOIN:

SELECT
    cl.cName,
    ISNULL(sc.cName, '-') AS pName
FROM cleints cl
INNER JOIN CSA.dbo.Clients c
    ON c.clientId = cl.clientID
LEFT JOIN CSA.dbo.Clients sc
    ON sc.clientID = c.sub
WHERE cl.clientID = 3

您正在尝试从位于两个不同(但链接或以其他方式可交叉访问)数据库中的客户端 table 获取客户端的名称(即给定的客户端 ID),对吗?这应该可以做到,尽管您需要从 "cl" 客户 table 所在的任何数据库的上下文中执行它:

 SELECT cl.cName,
   ISNULL(c.cName,'-') as pName 
 FROM clients cl 
 LEFT JOIN CSA.dbo.Clients c 
   ON c.clientID = cl.sub
 WHERE cl.clientID = 3 

顺便说一句,我建议实际返回 null 而不是使用破折号来表示缺失数据。这样你就知道那里真的什么都没有,也没有人输入“-”作为名字。