使用相同的记录集信息抓取 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 而不是使用破折号来表示缺失数据。这样你就知道那里真的什么都没有,也没有人输入“-”作为名字。
这是我在 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 而不是使用破折号来表示缺失数据。这样你就知道那里真的什么都没有,也没有人输入“-”作为名字。