Difference boolean for overlapped objects or any possible alternative
Boolean have limitations, as described in blender wiki:


  Boolean operates best on water-tight meshes, where inside/outside is
  clearly defined.
  
  The following characteristics are known to give bad output.
  
  
  Open volumes. 
  Overlapping geometry. 
  Self-intersections. 
  Zero-area faces.
  
  
  While they may not fail in all situations, they aren’t guaranteed to
  work properly.


When you join meshes you create Overlapping geometry and Self-intersections, that makes bad result.



So make 3 separate booleans to avoid self-intersections. 



Or maybe try different ways to build geometry, for example Animation nodes or Svercok ?

Or instead of using booleans remove useless parts of mesh manually, in edit mode?