我有两张桌子
日历(Calname,CCode,PCode)
查找(LCode,姓名)
日历表包含记录,
Calname | CCode | PCode
abc | O_R | P_R
xyz | C_R | P_C
查找表包含记录,
LCode | Name
O_R | Reporting
C_R | Cross
P_R | Process
P_C | ProcessCross
我必须以一种方式获取记录,我可以从查找表中获取包含记录行的所有代码的名称。
期望输出,
Calname | CCode | PCode | CCodeName | PCodeName
abc | O_R | P_R | Reporting | Process
xyz | C_R | P_C | Cross | ProcessCross
我不能在代码的基础上简单地应用内连接,它不会给我想要的输出。 我试图使用子查询,但它没有以某种方式解决, 。 任何人都可以帮我解决这个问题。
由于
答案 0 :(得分:3)
您可以尝试使用两个代码中的每一个将Calendar
表加入Lookup
表两次。
SELECT
c.Calname,
c.CCode,
c.PCode,
COALESCE(t1.Name, 'NA') AS CCodeName,
COALESCE(t2.Name, 'NA') AS PCodeName
FROM Calendar c
LEFT JOIN Lookup t1
ON c.CCode = t1.LCode
LEFT JOIN Lookup t2
ON c.PCode = t2.LCode
答案 1 :(得分:1)
Tim的答案的另一种选择是使用标量子查询,由于标量子查询缓存,这些子查询可能会或可能不会给你一些性能优势:
SELECT
c.Calname,
c.CCode,
c.PCode,
COALESCE((SELECT l1.name FROM lookup l1 WHERE c.ccode = l1.lcode), 'NA') AS CCodeName,
COALESCE((SELECT l2.name FROM lookup l2 WHERE c.pcode = l2.lcode), 'NA') AS PCodeName
FROM Calendar c;
我会测试两个答案,看看哪一个最适合您的数据。