如果之前已经提出过这个问题,我会提前道歉,但部分问题是我不确定如何提问我的问题;)。我们走了!
Newbie SQL程序员(SQL server 2008 R2)。我基本上有3个表:rma_header
,rma_detail
和code_type
。
我正在rma_header
和rma_detail
表之间进行内部联接,以获取有关我们RMA的所有数据。一切都是爱,但我的问题是在两个字段中reason
和fault
)是存储在code_type
表中的代码。所以数据出来了:
rma#|原因|故障
1234 | 012 |中号
在code_type
表中,他们有reason
和fault
代码及其说明,例如
code_type | code_id | code_desc
X | 012 |缺陷材料
F | M |销售
我们有多种代码类型用于X(由于原因)和F(用于故障)以及应用程序使用的一堆其他代码类型。
所以,我想编写一个包含数据的查询,并且还会在代码的描述中添加代码,而不是代码本身。
任何人都可以提供一些指导或链接,以便我可以学习如何做到这一点?提前谢谢!
答案 0 :(得分:1)
这只是更多的联接 假设始终存在原因和故障代码,它应该看起来像这样。
Select * From rma_header h
Inner join rma_detail d on d.HeaderID = h.ID
inner join code_type r On d.ReasonCode = r.CodeId and r.Code_type = 'X'
inner join code_type f On d.FaultCode = f.CodeId and f.Code_type = 'F'
诀窍是你必须加入code_type两次,一次是出于理由,一次是为了错误。
如果rma_detail的原因和错误代码可以为null,那么你需要一个左外连接,例如
Select * From rma_header h
Inner join rma_detail d on d.HeaderID - h.ID
left join code_type r On d.ReasonCode = r.CodeId and r.Code_type = 'X'
left join code_type f On d.FaultCode = f.CodeId and f.Code_type = 'F'
如果你有一个reason_codes表和一个fault_codes表,那就差别不大了。