PermissionId | AccountDataId | ProfileCompanyId
------------------------------------
val.1 | acc1 | 1
val.1 | acc1 | 2
val.1 | acc1 | null
val.1 | acc2 | 1
val.1 | acc2 | 6
val.1 | acc2 | 8
val.1 | acc2 | 10
val.1 | acc3 | null
Zbog dodatnog uslova permissionid mi je uvek isti. Jedan account moze da ima pridruzen jedan ili vise company. Ako je companyid null, to znaci da moze da vidi za sve kompanije.
Ono sto meni treba jeste da ako neki AccountDataId ima ProfileCompanyId null i jos neke, da dobijem samo taj null, a ako nema null da izlistam sve koje ima, tj da dobijem sledece (da se crveno ne prikaze):
PermissionId | AccountDataId | ProfileCompanyId
------------------------------------
val.1 | acc1 | 1
val.1 | acc1 | 2
val.1 | acc1 | null
val.1 | acc2 | 1
val.1 | acc2 | 6
val.1 | acc2 | 8
val.1 | acc2 | 10
val.1 | acc3 | null
ono sto sam ja uradio je otprilike sledece:
napravim view2 da dobijem accounte koji su ProfileCompanyId null:
Code:
select distinct u1.* from view1 u1 where u1.ProfileCompanyId is null
select distinct u1.* from view1 u1 where u1.ProfileCompanyId is null
napravim view3:
Code:
select PermissionId, AccountDataId, ProfileCompanyId, UnitId, Condition, MeetingId from view2
union
select u.PermissionId, u.AccountDataId, u.ProfileCompanyId, u.UnitId, u.Condition, u.MeetingId from view1 u
where not exists (select 1 from view2 u2 where u.AccountDataId = u2.AccountDataId and u.PermissionId = u2.PermissionId)
select PermissionId, AccountDataId, ProfileCompanyId, UnitId, Condition, MeetingId from view2
union
select u.PermissionId, u.AccountDataId, u.ProfileCompanyId, u.UnitId, u.Condition, u.MeetingId from view1 u
where not exists (select 1 from view2 u2 where u.AccountDataId = u2.AccountDataId and u.PermissionId = u2.PermissionId)
koji dalje koristim u upitu vec nekom trecem.
Da li ima lepse resenje (a verujem da ima)?