+create view preserve_packages as
+with package_libraries_status as (
+select P.package, P.release, P.version, P.status, EL.soname
+from
+elflibraries EL
+join packagefiles PF on PF.hash = EL.file
+join packages P
+on P.package = PF.package and P.version = PF.version and P.release = PF.release
+)
+, package_libraries_needed_status as (
+select --distinct
+P.package, P.release, P.version, P.status, EN.needed as soname, group_concat(PF.path) as needed_by
+from
+elfneeded EN
+join packagefiles PF on PF.hash = EN.file
+join packages P
+on P.package = PF.package and P.version = PF.version and P.release = PF.release
+group by P.package, P.release, P.version, P.status, EN.needed
+)
+select
+PLS.package, PLS.version, PLS.release, PLS.soname
+,PLN.package as npackage, PLN.version as nversion, PLN.release as nrelease, PLN.needed_by
+--,PLI.soname, PLI.package, PLI.version, PLI.release
+from package_libraries_needed_status PLN
+join package_libraries_status PLS
+on PLN.soname = PLS.soname
+and PLN.status = 'installed'
+and PLS.status != 'installed'
+left join package_libraries_status PLI
+on PLI.status = 'installed'
+and PLI.soname = PLN.soname
+where PLI.package is null
+;