2009-10-28 80 views
1
Table 1 
------- 
LANG_VALUE 
LANG_DESC 

Table 2 
------- 
EmpId 
LANG1 
LANG2 
LANG3 
LANG4 
LANG5 
LANG6 

它看起来像如下:连接两个表 - 多列单列

Table 1 
------- 

LANGVALUE LANGDESC 
------------------- 
SPAN  SPANISH 
GERM  GERMAN 

Table 2 
------- 
EmpId LANG1 LANG2 LANG3 LANG4 LANG5 LANG6 
----------------------------------------- 
1  SPAN NULL NULL NULL NULL NULL 
2  GERM SPAN NULL NULL NULL NULL 
3  GERM NULL NULL NULL NULL NULL 

预期结果:

EmpId LANG1 LANG2 LANG3 LANG4 LANG5 LANG6 
----------------------------------------- 
1  SPANISH NULL ... 
2  GERMAN SPANISH NULL... 
3  GERMAN NULL... 

如何做到这一点的SQL查询?

回答

2
SELECT EmpId, 
    K1.LANGDESC AS LANG1, 
    K2.LANGDESC AS LANG2, 
    K3.LANGDESC AS LANG3, 
    K4.LANGDESC AS LANG4, 
    K5.LANGDESC AS LANG5, 
    K6.LANGDESC AS LANG6 
FROM Table2 T 
LEFT JOIN Table1 K1 ON K1.LANGVALUE = T.LANG1 
LEFT JOIN Table2 K2 ON K2.LANGVALUE = T.LANG2 
LEFT JOIN Table3 K3 ON K3.LANGVALUE = T.LANG3 
LEFT JOIN Table4 K4 ON K4.LANGVALUE = T.LANG4 
LEFT JOIN Table5 K5 ON K5.LANGVALUE = T.LANG5 
LEFT JOIN Table6 K6 ON K6.LANGVALUE = T.LANG6 

WHERE... 

注:这不请自来的问题,但它可能是一个好主意,考虑在职工自愿语言存储在一个单独的表,在一到许多时尚的模式。这将允许超过6种语言(希望你有很多这样的...),其员工以及不为员工携带如此多的空事实并非如此通晓多种语言,而且更重要的是它将允许查询说所有的员工提供一个如果在LANG2或LANG3等中找到该语言,则无需担心;

注意,Employee-Langage表还可以具有指示“顺序”(或流畅程度)的属性, ,这样你还可以搜索谁第一家上市的语言的员工为x。

+0

感谢这有助于... – Nick 2009-10-29 22:33:13

0

我想你可以根据你的表2的格式,我有不同的感觉,你是不是正确归一表2,这就是为什么你在第一个有这个问题,子查询做到这一点地点。

select EmpId,(Select LANGDESC from [Table 1] t1 where t2.Lang1=LANGVALUE) as LANG1,(and so on) where from [Table 2] t2

+0

MJV是一堆更好的答案。改为行事。 – Erich 2009-10-28 22:45:04