Хорошо, поэтому, учитывая пометку кластера базы данных ниже (SQL Server 2005), мне нужно сделать следующее:
- Получите users.id для temp.empid, которые не являются дубликатами (easy ids = 3, 4 с простым объединением)
- Получите users.id для temp.empid, которые являются дубликатами, но существуют в oldLog (easy ids = 1, 7 достаточно легко с 2 объединениями)
- Получите users.id для temp.empid, который повторяется и отсутствует в oldLog (wtf должен быть id = 8)
The Mother Load => Этот пользователь не входит в oldLog и является дубликатом, поэтому я должен проверить и dbo.firstCriteria, и dbo.secondCriteria.
_ если сумма равна 200, я проверяю dbo.firstCriteria на то, что счет завершен> = 3. _
если сумма равна 100, я проверяю dbo.secondCriteria для завершения.
- вставить в newLog
dbo.users
id | empid
=============
1 | 1234
2 | 2345
3 | 3456
4 | 4567 (Missing log table)
5 | 5678 (Missing temp table)
6 | 1234 (Duplicate empid)
7 | 2345 (Duplicate empid)
8 | 6789 (The Mother Load Missing from oldLog and duplicate empid)
9 | 6789
10 | 1111 (The Mother Load Missing from oldLog and duplicate empid)
11 | 1111
dbo.temp
empid | amount
========================
1234 (id 1) | 200
2345 (id 7) | 200
3456 (id 3) | 100
4567 (id 4) | 100
6789 (id 8) | 200
1111 (id 11) | 100
dbo.oldLog
id
==
1
3
7
dbo.firstCriteria
id | task | status
===========================
1 | task1 | completed
1 | task2 | completed
1 | task3 | completed
2 | task1 | completed
3 | task1 | completed
8 | task1 | completed
8 | task2 | completed
8 | task3 | completed
dbo.secondCriteria
id | status
==============
1 | completed
7 | completed
3 | completed
11 | completed
dbo.newLog
BLANK
Мои результаты должны быть следующими:
id | empid
=============
1 | 1234
7 | 2345
3 | 3456
4 | 4567
8 | 6789
11 | 1111
И вот что я пытался и застрял:
SELECT users.id
FROM TEMP
JOIN users
ON users.empid = TEMP.empid
WHERE users.empid NOT IN (SELECT users.empid
FROM users
GROUP BY users.empid
HAVING COUNT(users.empid) > 1)
UNION ALL
SELECT users.id
FROM TEMP
JOIN users
ON users.empid = TEMP.empid
WHERE users.empid IN (SELECT users.empid
FROM users
GROUP BY users.empid
HAVING COUNT(users.empid) > 1)
AND users.id IN (SELECT oldlog.id
FROM oldlog)
UNION ALL
--????