需要从查找表中获取价值

时间:2019-05-09 01:50:39

标签: sql

我有一个带有ecode,emp ID(一些值)的表X

37,10
47,20
57,30

有2个查询表

查找表1仅包含emp ID详细信息(对此感兴趣)

10
20

所以当我加入..i时,我就获得了所有需要的值(那是一部分)

我的结果将是

37 10
47 20

第二部分是

不满足连接条件的应该在表2上查找 2列

ecode, other_codes
37  xxx
47  YYY
57  AAA

所以当30进来时,我想返回AAA,而我的最终数据集应该是

37, 10
47,20
57 AAA

感谢任何帮助!

谢谢

1 个答案:

答案 0 :(得分:1)

您可以保留两个表的联接,并使用CASE语句从一个表或另一个表中选择一个值。

我创建了一个数据库提琴,我认为它可以根据您的描述来说明您的情况:https://github.com/Boemska/metanav/tree/master/sas/stps/User

这里是后代的代码。设置表格:

CREATE TABLE tableX (       
   eCode int,       
   employeeId int 
); 
INSERT INTO tableX (eCode, employeeId) VALUES (37, 10); 
INSERT INTO tableX (eCode, employeeId) VALUES (47, 20); 
INSERT INTO tableX (eCode, employeeId) VALUES (57, 30);

CREATE TABLE employeeIds (employeeId int); 
INSERT INTO employeeIds (employeeId) VALUES (10); 
INSERT INTO employeeIds (employeeId) VALUES (20);

CREATE TABLE otherCodes (       
   eCode int,       
   other_codes varchar(10) 
); 
INSERT INTO otherCodes (eCode, other_codes) VALUES (37, 'XXX'); 
INSERT INTO otherCodes (eCode, other_codes) VALUES (47, 'YYY'); 
INSERT INTO otherCodes (eCode, other_codes) VALUES (57, 'AAA');

基于此架构的查询:

SELECT 
    tx.eCode, 
    CASE WHEN ei.employeeId IS NULL THEN oc.other_codes ELSE ei.employeeId END as 'result'
FROM tableX tx
LEFT JOIN employeeIds ei ON tx.employeeId = ei.employeeId
LEFT JOIN otherCodes oc ON tx.eCode = oc.eCode;