I'm issuing the following query:
Select Id, AssignedOn,
(
  SELECT gn.Name FROM GeoNode gn WHERE gn.Id = 
  (
    SELECT MIN(t.StartPointId) KEEP (dense_rank FIRST ORDER BY t.StartTime1)
    FROM Task t
    WHERE t.Id IN 
    (
      SELECT TaskId 
      FROM ResourceAssignment 
      WHERE TargetResourceId = ra.TargetResourceId AND SourceResourceId = ra.SourceResourceId
    )
  ) 
) as DepartureNodeName
FROM 
    ResourceAssignment ra;
the "Explain Plan" shows me TABLE ACCESS (FULL) on "TASK" table, I want to get rid of it.
The query basically wants to take StartPointId where StartTime1 is minimum from Task table based on saved Task ids.
Edit:
Execution plan is given bellow, you can see the cost and access of Task table:
Plan hash value: 3000073173
------------------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name                           | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |                                |   281 | 11521 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID    | GEONODE                        |     1 |    24 |     2   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN             | PK_GEONODE                     |     1 |       |     1   (0)| 00:00:01 |
|   3 |    SORT AGGREGATE               |                                |     1 |    25 |            |          |
|*  4 |     FILTER                      |                                |       |       |            |          |
|   5 |      TABLE ACCESS FULL          | TASK                           | 15618 |   381K|    68   (0)| 00:00:01 |
|*  6 |      TABLE ACCESS BY INDEX ROWID| RESOURCEASSIGNMENT             |     1 |    30 |     2   (0)| 00:00:01 |
|*  7 |       INDEX RANGE SCAN          | PK_RESASSIGNMENT_SOURCE_TARGET |     5 |       |     1   (0)| 00:00:01 |
|   8 |  TABLE ACCESS FULL              | RESOURCEASSIGNMENT             |   281 | 11521 |     3   (0)| 00:00:01 |
------------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$2 / GN@SEL$2
   2 - SEL$2 / GN@SEL$2
   3 - SEL$3
   5 - SEL$3 / T@SEL$3
   6 - SEL$4 / RESOURCEASSIGNMENT@SEL$4
   7 - SEL$4 / RESOURCEASSIGNMENT@SEL$4
   8 - SEL$1 / RA@SEL$1
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("GN"."ID"= (SELECT MIN("T"."STARTPOINTID") KEEP (DENSE_RANK FIRST  ORDER BY 
              "T"."STARTTIME1") FROM "TASK" "SYS_ALIAS_1" WHERE  EXISTS (SELECT 0 FROM "RESOURCEASSIGNMENT" 
              "RESOURCEASSIGNMENT" WHERE "TARGETRESOURCEID"=:B1 AND "SOURCERESOURCEID"=:B2 AND "TASKID"=:B3)))
   4 - filter( EXISTS (SELECT 0 FROM "RESOURCEASSIGNMENT" "RESOURCEASSIGNMENT" WHERE 
              "TARGETRESOURCEID"=:B1 AND "SOURCERESOURCEID"=:B2 AND "TASKID"=:B3))
   6 - filter("TASKID"=:B1)
   7 - access("SOURCERESOURCEID"=:B1 AND "TARGETRESOURCEID"=:B2)
Column Projection Information (identified by operation id):
-----------------------------------------------------------
   1 - "GN".ROWID[ROWID,10], "GN"."NAME"[NVARCHAR2,1000]
   2 - "GN".ROWID[ROWID,10]
   3 - (#keys=0) MIN("T"."STARTPOINTID") KEEP (DENSE_RANK FIRST  ORDER BY "T"."STARTTIME1")[22]
   4 - "T"."STARTPOINTID"[NUMBER,22], "T"."STARTTIME1"[NUMBER,22]
   5 - "T"."ID"[NUMBER,22], "T"."STARTPOINTID"[NUMBER,22], "T"."STARTTIME1"[NUMBER,22]
   6 - "RESOURCEASSIGNMENT".ROWID[ROWID,10], "TASKID"[NUMBER,22]
   7 - "RESOURCEASSIGNMENT".ROWID[ROWID,10]
   8 - "ID"[NUMBER,22], "SYS_ALIAS_7"."SOURCERESOURCEID"[NUMBER,22], 
       "SYS_ALIAS_7"."TARGETRESOURCEID"[NUMBER,22], "ASSIGNEDON"[TIMESTAMP,11]
