所以我有2张桌子。 Employee
和Draft_Employee
。它们是相同的,除了Draft_Employee
中的属性允许空值。
2个相同表的原因是draft_Employee是用于导入过程的表 - 它是一个临时容器。我们不希望数据与生产员工混淆。
现在,当必须导入员工时,系统必须检查员工是否已存在于数据库中。
首先,它会看到是否可以在Employee表中找到具有相同EmpID的员工。 如果找到,它将查看Draft_Employee中的员工并查找NULL或EMPTY属性。然后它将获取Employee表中相同字段的值,并将其放入draft_Employee中的空或NULL字段
empID name something1 something2 | empID name something1 something2
----- ---- ---------- ---------- | ---- ---- ---------- -----------
1 Casper blahblah blahblah2 | 2 Michael NULL text2fs
2 Michael txttxt |
右边是员工,左边是Draft_Employee。
我想要一个产生
的SQL查询empID name something1 something2
----- ---- ---------- ----------
2 Michael txttxt text2fs
我最接近的是LEFT OUTER JOIN
但是它给了我来自两个表的数据
编辑:我的查询。之前我没有使用它,因为拼写是丹麦语。
SELECT * FROM Kladde_Ressource
LEFT OUTER JOIN Ressource
ON Ressource.RessourceID = Kladde_Ressource.RessourceID
WHERE Kladde_Ressource.EAN = ''
OR Kladde_Ressource.navnLang = ''
OR Kladde_Ressource.navnKort = ''
etc...
答案 0 :(得分:4)
我并不完全掌握您的要求,因此我根据您发布的数据和所需结果查询。
将结果合并到一个结果集
<强>声明强>
SELECT e.empID
, COALESCE(e.name, de.name) AS name
, COALESCE(e.something1, de.something1) AS something1
, COALESCE(e.something2, de.something2) AS something2
FROM employee e
INNER JOIN draft_employee de ON de.empID = e.empID
答案 1 :(得分:3)
这应该可以解决问题:
SELECT Employee.empId,
ISNULL(Employee.name, Draft_Employee.name) AS name,
ISNULL(Employee.something1, Draft_Employee.something1) AS something1,
ISNULL(Employee.something2, Draft_Employee.something2) AS something2
FROM Employee LEFT OUTER JOIN
Draft_Employee ON Employee.empID = Draft_Employee.EmpId
答案 2 :(得分:1)
使用coalesce
函数获取第一个非空值:
select
e.empID,
coalesce(d.name, e.name),
coalesce(d.something1, e.something1),
coalesce(d.something2, e.something2)
from
Employee e
inner join Draft_Employee d on d.empID = e.empID
答案 3 :(得分:0)
如何使用UNION
和GROUP BY
:
SELECT empID, name, MAX(something1) AS something1, MAX(something2) AS something2
FROM (
SELECT empID, name, something1, something2 FROM Employee WHERE empID = 2
UNION
SELECT empID, name, something1, something2 FROM draft_Employee WHERE empID = 2
)
GROUP BY empID, name