我有一个带有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
感谢任何帮助!
谢谢
答案 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;