Sql server 基于外键返回数据的Transact-SQL
有一个表a,该表有两列,每列都是可以存储键数据的其他表的外键。需要根据这些列提取关键数据,例如名称。可以对每个表进行左连接,但这将包含大量空值,因此希望避免这种情况。外键不使用空值,因为每个值可能都存在一个键-但我们不这样使用系统,因此一个字段的值为零,另一个字段的值为零 例如: 表Sql server 基于外键返回数据的Transact-SQL,sql-server,tsql,Sql Server,Tsql,有一个表a,该表有两列,每列都是可以存储键数据的其他表的外键。需要根据这些列提取关键数据,例如名称。可以对每个表进行左连接,但这将包含大量空值,因此希望避免这种情况。外键不使用空值,因为每个值可能都存在一个键-但我们不这样使用系统,因此一个字段的值为零,另一个字段的值为零 例如: 表A: Index App Ten ---------------- 1 123 0 2 124 0 3 0 125 4 0 126
A
:
Index App Ten
----------------
1 123 0
2 124 0
3 0 125
4 0 126
表App
:
Index LName
---------------
123 Jones
124 Smith
表10
:
Index Lname
---------------
125 Doe
126 Williams
什么是正确的方法来连接这些表以基于索引选择表(如果为零则忽略),并返回所需的数据,而不使用左连接和空值
期望输出:
Index App Ten Lname
------------------------------
1 123 0 Jones
2 124 0 Smith
3 0 125 Doe
4 0 126 Williams
选择一个[index],一个.App,0作为[Ten],App.Lname
从
加入应用程序
在a.App=App。[索引]
其中a.应用程序0
横断
选择[index],0作为[App],a.Ten,Ten.Lname
从
加入十个
a.十=十。[索引]
a.10.0在哪里
按1订购
从应用程序中获取值,然后将其与10相交忽略0个选项
选择一个[index],一个.App,0为[Ten],App.Lname
Select A.Ind, A.App, A.Ten, coalesce(ap.LName,t.LName)
from A
LEFT JOIN App ap on ap.Ind = A.App
LEFT JOIN Ten t on A.Ten = t.Ind
从
加入应用程序
在a.App=App。[索引]
其中a.应用程序0
横断
选择[index],0作为[App],a.Ten,Ten.Lname
从
加入十个
a.十=十。[索引]
a.10.0在哪里
按1订购
从应用程序中获取值,然后将其与10相交忽略0 vlues
Select A.Ind, A.App, A.Ten, coalesce(ap.LName,t.LName)
from A
LEFT JOIN App ap on ap.Ind = A.App
LEFT JOIN Ten t on A.Ten = t.Ind
Coalesce将选择第一个值,如果第一个值为null,它将选择第二个值
Coalesce将选择第一个值,如果第一个值为空,它将选择第二个值谢谢你这就是我需要的谢谢你这就是我需要的我尝试了这个,我得到了这个错误消息<代码>当前命令发生严重错误。如果有结果,应该丢弃。以前从未见过,但很有趣。进一步来看,这似乎是一个索引问题。虽然这可能有效,但请提供一些解释,说明它的作用,因为它不是一个你得到解决方案并离开的网站。它应该是一个学习的地方。目前,您的答案倾向于Deletjolnir@LordZsolt,这是使用问题名称的完整语法。因此,不是重复MSDN文档的站点。文档中对语法的每一点都进行了详细的介绍。@bum好吧,我只是告诉你,因为你的问题被标记为
低质量帖子
。我是从评论中来的,不是从浏览SO来的。试着在[reserved]字周围用方括号括起来,比如[index]我试过这个,我得到了这个错误消息<代码>当前命令发生严重错误。如果有结果,应该丢弃。以前从未见过,但很有趣。进一步来看,这似乎是一个索引问题。虽然这可能有效,但请提供一些解释,说明它的作用,因为它不是一个你得到解决方案并离开的网站。它应该是一个学习的地方。目前,您的答案倾向于Deletjolnir@LordZsolt,这是使用问题名称的完整语法。因此,不是重复MSDN文档的站点。文档中对语法的每一点都进行了详细的介绍。@bum好吧,我只是告诉你,因为你的问题被标记为低质量帖子
。我是从评论中来的,不是浏览SO来的。试着在[保留]字周围[使用]方括号,比如[索引]