I write this statement which works correctly in all cases except one case
SELECT p.priv_no FROM osqs_privileges p,osqs_users_privileges up
WHERE up.priv_no = p.priv_no AND up.user_no = 54 AND up."GRANT" = 'Y'
UNION
SELECT p.priv_no FROM
osqs_privileges p,osqs_groups_privileges gp,osqs_users_groups ug,osqs_users_privileges up
WHERE gp.priv_no = p.priv_no AND ug.grp_no = gp.grp_no AND ug.user_no = 54
AND gp.priv_no NOT IN
(SELECT priv_no FROM osqs_users_privileges WHERE user_no = 54 AND "GRANT" = 'N');
in a case that osqs_users_privileges have no rows and this statement (SELECT priv_no FROM osqs_users_privileges WHERE user_no = 54 AND “GRANT” = ‘N’) return 0 rows, all the script return 0 rows even if othe select statements returns data. why?
You need to use an OUTER JOIN: