У меня есть две таблицы, псевдоструктура которых будет выглядеть следующим образом:
User_master
user pfid
------------
reno 2
andrew 3
reno 4
rosh 5
rosh 8
john 7
HR_master
user pfid
-------------
andrew 3
reno 4
rosh 9
john 12
Roaster_master
user pfid
--------------
andrew 3
reno 4
rosh 10
john 12
Мне нужно объединить все 3 таблицы в столбце user и найти строки в HR_master, где pfid не совпадает с любой эквивалентной записью в User_master. Если вы заметили одну из записей для «Рено» совпадений, в то время как ни одна из записей для «Рош» не соответствует.
Это было бы несложной задачей, если бы в User_master была только одна запись, осложнение возникает из-за нескольких строк.
Ожидаемый результат -
USM.user USM.pfid HRM.pfid RM.pfid
-----------------------------------------
rosh 5|8 9 10
john 7 12 12
Как и просили, вот запрос, который я скомпилировал:
select
UM.email,UM.pfid as UMpfid,
HRM.pfid, RM.pfid
from user_master UM
left join HR_master HRM on (HRM.email=UM.email)
left join Roaster_master RM on (RM.email=UM.email)
where UM.pfid != HRM.pfid
Приведенный выше запрос также возвращает "reno", тогда как он не должен появляться, поскольку одна из строк в User_master имеет pfid-соответствие.