What is the fastest way of finding the employees user has access to?
===

I have a employee table which has general employee information. Another User table with user information. Users can create employees. 

When users create employee, user assign division, product, sub product and region to employees. 

Users themselevs have access to particular division, product, sub product and region. 

e.g. User A has access to Division D1, Product P1 (Region= Asia, America) , P2 (Region= Asia) , P3 (Region= Asia, America). 

Division is a parent of Product. Each division can have many products. 

When I say User A has access to  Product P1 (Region= Asia, America), it means user A can add employees with product = P1 and region = Asia or america. 

He can not add employee to any other region for product P1 or any other products itself. 

If assuming User A has added 500 employees in db, another user B  has added 500 another employees and so on. 

How do I write an efficient query to get the employees which I have access to?

Please note that It may happen that another user with same access right as I have can add employees and I should be able to see those employees as well. 

Below is the db schema I have.

    	--------------------------------------------------------
	--  DDL for Table BI_EMPLOYEE
	--------------------------------------------------------
	
	  CREATE TABLE "HEADCOUNT_BI"."BI_EMPLOYEE" 
	   (	"EMP_ID" NUMBER(*,0) NOT NULL ENABLE, 
		"FIRSTNAME" VARCHAR2(4000), 
		"LASTNAME" VARCHAR2(4000), 
		"DIVISION_ID" NUMBER(*,0), 
		"PRODUCT_ID" NUMBER(*,0), 
		"SUB_PRODUCT_ID" NUMBER(*,0), 
		"REGION_ID" NUMBER(*,0), 
		"COUNTRY_ID" NUMBER(*,0), 
		"CITY" VARCHAR2(4000), 
		"SUB_PRODUCT_2_ID" NUMBER(*,0), 
		"SUB_PRODUCT_3_ID" NUMBER(*,0), 
		"SUB_PRODUCT_4_ID" NUMBER(*,0), 
		 CONSTRAINT "HEADCOUNT_EMPLOYEE_BI_PK" PRIMARY KEY ("EMP_ID") ENABLE
	   ) ;
	
	
	--------------------------------------------------------
	--  DDL for Table BI_USER
	--------------------------------------------------------
	
	  CREATE TABLE "HEADCOUNT_BI"."BI_USER" 
	   (	"USER_ID" NUMBER(*,0) NOT NULL ENABLE, 
		"FIRSTNAME" VARCHAR2(4000), 
		"LASTNAME" VARCHAR2(4000), 
		"EMAIL" VARCHAR2(4000) NOT NULL ENABLE, 
		"ACTIVE" VARCHAR2(1), 
		 CONSTRAINT "HEADCOUNT_USER_PK" PRIMARY KEY ("USER_ID") ENABLE
	   ) ;
	
	
	--------------------------------------------------------
	--  DDL for Table BI_USER_ACCESS
	--------------------------------------------------------
	
	  CREATE TABLE "HEADCOUNT_BI"."BI_USER_ACCESS" 
	   (	"USER_ACCESS_ID" NUMBER(*,0) NOT NULL ENABLE, 
		"USER_ID" NUMBER(*,0), 
		"DIVISION_ID" NUMBER(*,0), 
		"PRODUCT_ID" NUMBER(*,0), 
		"SUB_PRODUCT_ID" NUMBER(*,0), 
		"REGION_ID" NUMBER(*,0), 
		 CONSTRAINT "BI_USER_ACCESS_PK" PRIMARY KEY ("USER_ACCESS_ID") ENABLE
	   ) ;



and below is the query I have written so far but I am not sure if it is best way of doing it.

    	SELECT 
	  *
	FROM 
	  BI_EMPLOYEE e 
	JOIN BI_USER_ACCESS uad On uad.DIVISION_ID = e.DIVISION_ID and uad.USER_ID = 137
	JOIN BI_USER_ACCESS uap On uap.PRODUCT_ID = e.PRODUCT_ID and uap.USER_ID = 137
	JOIN BI_USER_ACCESS uasp On uasp.SUB_PRODUCT_ID = e.SUB_PRODUCT_ID and uasp.USER_ID = 137
	JOIN BI_USER_ACCESS uar On uar.REGION_ID = e.REGION_ID  and uar.SUB_PRODUCT_ID = e.SUB_PRODUCT_ID and uar.USER_ID = 137





 