<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Intersect — Get &amp;quot;first instance only&amp;quot; when using SQL spatial relational functions in Geodatabase Questions</title>
    <link>https://community.esri.com/t5/geodatabase-questions/intersect-get-quot-first-instance-only-quot-when/m-p/1272324#M8359</link>
    <description>&lt;P&gt;I have&amp;nbsp;&lt;FONT face="courier new,courier" color="#0000FF"&gt;polygons&lt;/FONT&gt;&amp;nbsp;and&amp;nbsp;&lt;FONT face="courier new,courier" color="#0000FF"&gt;points&lt;/FONT&gt;&amp;nbsp;SDO_Geometry tables in an Oracle 18c 10.7.1 EGDB.&lt;/P&gt;&lt;P&gt;Fake sample data:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bud_1-1679980296541.png" style="width: 400px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/66461iC35739E4AB7F5D60/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Bud_1-1679980296541.png" alt="Bud_1-1679980296541.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class=""&gt;TABLE&lt;/SPAN&gt; polygons (objectid NUMBER(&lt;SPAN class=""&gt;4&lt;/SPAN&gt;,&lt;SPAN class=""&gt;0&lt;/SPAN&gt;), shape SDO_GEOMETRY);
&lt;SPAN class=""&gt;INSERT&lt;/SPAN&gt; &lt;SPAN class=""&gt;INTO&lt;/SPAN&gt; polygons  (objectid,shape) 
       &lt;SPAN class=""&gt;VALUES&lt;/SPAN&gt; (&lt;SPAN class=""&gt;1&lt;/SPAN&gt;,SDO_GEOMETRY(&lt;SPAN class=""&gt;2003&lt;/SPAN&gt;, &lt;SPAN class=""&gt;26917&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;, sdo_elem_info_array(&lt;SPAN class=""&gt;1&lt;/SPAN&gt;, &lt;SPAN class=""&gt;1003&lt;/SPAN&gt;, &lt;SPAN class=""&gt;1&lt;/SPAN&gt;), 
       sdo_ordinate_array(&lt;SPAN class=""&gt;668754.6396&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869279.7913&lt;/SPAN&gt;, &lt;SPAN class=""&gt;668782.1453&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869276.1585&lt;/SPAN&gt;, &lt;SPAN class=""&gt;668790.9678&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869344.6631&lt;/SPAN&gt;, &lt;SPAN class=""&gt;668762.4242&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869346.22&lt;/SPAN&gt;, &lt;SPAN class=""&gt;668754.6396&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869279.7913&lt;/SPAN&gt;)));

&lt;SPAN class=""&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class=""&gt;TABLE&lt;/SPAN&gt; points (objectid NUMBER(&lt;SPAN class=""&gt;4&lt;/SPAN&gt;,&lt;SPAN class=""&gt;0&lt;/SPAN&gt;), shape SDO_GEOMETRY);
&lt;SPAN class=""&gt;INSERT&lt;/SPAN&gt; &lt;SPAN class=""&gt;INTO&lt;/SPAN&gt;  points (objectid,shape) &lt;SPAN class=""&gt;VALUES&lt;/SPAN&gt; (&lt;SPAN class=""&gt;1&lt;/SPAN&gt;,SDO_GEOMETRY(&lt;SPAN class=""&gt;2001&lt;/SPAN&gt;, &lt;SPAN class=""&gt;26917&lt;/SPAN&gt;, sdo_point_type(&lt;SPAN class=""&gt;668768.133&lt;/SPAN&gt;,  &lt;SPAN class=""&gt;4869255.3995&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;), &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;));
&lt;SPAN class=""&gt;INSERT&lt;/SPAN&gt; &lt;SPAN class=""&gt;INTO&lt;/SPAN&gt;  points (objectid,shape) &lt;SPAN class=""&gt;VALUES&lt;/SPAN&gt; (&lt;SPAN class=""&gt;2&lt;/SPAN&gt;,SDO_GEOMETRY(&lt;SPAN class=""&gt;2001&lt;/SPAN&gt;, &lt;SPAN class=""&gt;26917&lt;/SPAN&gt;, sdo_point_type(&lt;SPAN class=""&gt;668770.2088&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869306.259&lt;/SPAN&gt;,  &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;), &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;));
&lt;SPAN class=""&gt;INSERT&lt;/SPAN&gt; &lt;SPAN class=""&gt;INTO&lt;/SPAN&gt;  points (objectid,shape) &lt;SPAN class=""&gt;VALUES&lt;/SPAN&gt; (&lt;SPAN class=""&gt;3&lt;/SPAN&gt;,SDO_GEOMETRY(&lt;SPAN class=""&gt;2001&lt;/SPAN&gt;, &lt;SPAN class=""&gt;26917&lt;/SPAN&gt;, sdo_point_type(&lt;SPAN class=""&gt;668817.9545&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869315.0815&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;), &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;));
&lt;SPAN class=""&gt;INSERT&lt;/SPAN&gt; &lt;SPAN class=""&gt;INTO&lt;/SPAN&gt;  points (objectid,shape) &lt;SPAN class=""&gt;VALUES&lt;/SPAN&gt; (&lt;SPAN class=""&gt;4&lt;/SPAN&gt;,SDO_GEOMETRY(&lt;SPAN class=""&gt;2001&lt;/SPAN&gt;, &lt;SPAN class=""&gt;26917&lt;/SPAN&gt;, sdo_point_type(&lt;SPAN class=""&gt;668782.1134&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869327.1634&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;), &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;));&lt;/PRE&gt;&lt;P&gt;&lt;A href="https://dbfiddle.uk/bmFoKShP" target="_blank" rel="nofollow noopener noreferrer"&gt;db&amp;lt;&amp;gt;fiddle&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;And I have a query that selects polygons that intersect at least one point.&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&amp;nbsp; --SDO_Geometry&lt;BR /&gt;  &lt;SPAN class=""&gt;SELECT&lt;/SPAN&gt; poly_objectid,
         pnt_objectid
    &lt;SPAN class=""&gt;FROM&lt;/SPAN&gt; (
          &lt;SPAN class=""&gt;SELECT&lt;/SPAN&gt; poly.objectid &lt;SPAN class=""&gt;as&lt;/SPAN&gt; poly_objectid,
                 pnt.objectid  &lt;SPAN class=""&gt;as&lt;/SPAN&gt; pnt_objectid,
                 &lt;SPAN class=""&gt;row_number&lt;/SPAN&gt;() &lt;SPAN class=""&gt;over&lt;/SPAN&gt;(&lt;SPAN class=""&gt;partition&lt;/SPAN&gt; &lt;SPAN class=""&gt;by&lt;/SPAN&gt; poly.objectid &lt;SPAN class=""&gt;order&lt;/SPAN&gt; &lt;SPAN class=""&gt;by&lt;/SPAN&gt; &lt;SPAN class=""&gt;null&lt;/SPAN&gt;) rn
            &lt;SPAN class=""&gt;FROM&lt;/SPAN&gt; polygons poly
      &lt;SPAN class=""&gt;CROSS&lt;/SPAN&gt; &lt;SPAN class=""&gt;JOIN&lt;/SPAN&gt; points pnt
           &lt;SPAN class=""&gt;WHERE&lt;/SPAN&gt; sdo_anyinteract(poly.shape, pnt.shape) &lt;SPAN class=""&gt;=&lt;/SPAN&gt; &lt;SPAN class=""&gt;'TRUE'&lt;/SPAN&gt;
         )
   &lt;SPAN class=""&gt;WHERE&lt;/SPAN&gt; rn &lt;SPAN class=""&gt;=&lt;/SPAN&gt; &lt;SPAN class=""&gt;1&lt;/SPAN&gt;

   POLY_OBJECTID PNT_OBJECTID
   &lt;SPAN class=""&gt;------------- ------------&lt;/SPAN&gt;
               &lt;SPAN class=""&gt;1&lt;/SPAN&gt;            &lt;SPAN class=""&gt;2&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&lt;SPAN&gt;The query only selects one row per polygon using &lt;FONT face="courier new,courier" color="#0000FF"&gt;row_number()&lt;/FONT&gt; and &lt;FONT face="courier new,courier" color="#0000FF"&gt;WHERE rn = 1&lt;/FONT&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Reason:&lt;BR /&gt;I want to mimic what Select By Location does in ArcGIS Pro.&amp;nbsp;Select By Location only selects a single row per input polygon feature. It doesn't propagate duplicate polygon rows for each point that intersects a given polygon. Whereas database queries &lt;U&gt;&lt;EM&gt;do&lt;/EM&gt;&lt;/U&gt;&amp;nbsp;propagate duplicate polygon rows via the join. That's a typical difference between ArcGIS and full-blown SELECT queries with joins. All of which is expected.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;So, like I said, the query above only selects one row per polygon. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;The sample data and query above are for SDO_Geometry. But the same thing applies to SDE.ST_Geometry:&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&amp;nbsp;&amp;nbsp; --ST_Geometry
&amp;nbsp; SELECT poly_objectid,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pnt_objectid
    FROM (
          SELECT poly.objectid as poly_objectid,
                 pnt.objectid as pnt_objectid,
                 row_number() over(partition by poly.objectid order by null) rn
            FROM polygons poly
      CROSS JOIN points pnt
           WHERE sde.st_intersects (poly.shape, pnt.shape) = 1
         )
   WHERE rn = 1

   POLY_OBJECTID PNT_OBJECTID
   ------------- ------------
               1            2&lt;/PRE&gt;&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;This is how the queries work:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;1. Inner query: Selects multiple polygon rows; one for each intersecting point.&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;POLY_OBJECTID PNT_OBJECTID
------------- ------------
            1            2
            1            4&lt;/PRE&gt;&lt;P&gt;&lt;SPAN&gt;2. Outer query: Only keep one row per polygon. The tie-breaker is arbitrary; it doesn't matter what duplicate row is kept (see&amp;nbsp; &lt;FONT face="courier new,courier" color="#0000FF"&gt;WHERE rn = 1&lt;/FONT&gt;&amp;nbsp; and&amp;nbsp; &lt;FONT face="courier new,courier" color="#0000FF"&gt;order by null&lt;/FONT&gt; ). Related post &lt;A href="https://stackoverflow.com/questions/75861531/use-row-number-window-function-without-specifying-order-by" target="_blank" rel="noopener"&gt;here&lt;/A&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;POLY_OBJECTID PNT_OBJECTID
------------- ------------
            1            2&lt;/PRE&gt;&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;STRONG&gt;Question:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;While the above technique works, it's occurred to me that it might not be the most efficient way to do it. Why initially select multiple intersection matches, when the duplicates will be ignored anyway?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Is there a way to only get the first instance of an intersection, and then stop looking and move on to the next polygon?&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Tue, 28 Mar 2023 13:13:45 GMT</pubDate>
    <dc:creator>Bud</dc:creator>
    <dc:date>2023-03-28T13:13:45Z</dc:date>
    <item>
      <title>Intersect — Get "first instance only" when using SQL spatial relational functions</title>
      <link>https://community.esri.com/t5/geodatabase-questions/intersect-get-quot-first-instance-only-quot-when/m-p/1272324#M8359</link>
      <description>&lt;P&gt;I have&amp;nbsp;&lt;FONT face="courier new,courier" color="#0000FF"&gt;polygons&lt;/FONT&gt;&amp;nbsp;and&amp;nbsp;&lt;FONT face="courier new,courier" color="#0000FF"&gt;points&lt;/FONT&gt;&amp;nbsp;SDO_Geometry tables in an Oracle 18c 10.7.1 EGDB.&lt;/P&gt;&lt;P&gt;Fake sample data:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bud_1-1679980296541.png" style="width: 400px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/66461iC35739E4AB7F5D60/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Bud_1-1679980296541.png" alt="Bud_1-1679980296541.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class=""&gt;TABLE&lt;/SPAN&gt; polygons (objectid NUMBER(&lt;SPAN class=""&gt;4&lt;/SPAN&gt;,&lt;SPAN class=""&gt;0&lt;/SPAN&gt;), shape SDO_GEOMETRY);
&lt;SPAN class=""&gt;INSERT&lt;/SPAN&gt; &lt;SPAN class=""&gt;INTO&lt;/SPAN&gt; polygons  (objectid,shape) 
       &lt;SPAN class=""&gt;VALUES&lt;/SPAN&gt; (&lt;SPAN class=""&gt;1&lt;/SPAN&gt;,SDO_GEOMETRY(&lt;SPAN class=""&gt;2003&lt;/SPAN&gt;, &lt;SPAN class=""&gt;26917&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;, sdo_elem_info_array(&lt;SPAN class=""&gt;1&lt;/SPAN&gt;, &lt;SPAN class=""&gt;1003&lt;/SPAN&gt;, &lt;SPAN class=""&gt;1&lt;/SPAN&gt;), 
       sdo_ordinate_array(&lt;SPAN class=""&gt;668754.6396&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869279.7913&lt;/SPAN&gt;, &lt;SPAN class=""&gt;668782.1453&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869276.1585&lt;/SPAN&gt;, &lt;SPAN class=""&gt;668790.9678&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869344.6631&lt;/SPAN&gt;, &lt;SPAN class=""&gt;668762.4242&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869346.22&lt;/SPAN&gt;, &lt;SPAN class=""&gt;668754.6396&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869279.7913&lt;/SPAN&gt;)));

&lt;SPAN class=""&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class=""&gt;TABLE&lt;/SPAN&gt; points (objectid NUMBER(&lt;SPAN class=""&gt;4&lt;/SPAN&gt;,&lt;SPAN class=""&gt;0&lt;/SPAN&gt;), shape SDO_GEOMETRY);
&lt;SPAN class=""&gt;INSERT&lt;/SPAN&gt; &lt;SPAN class=""&gt;INTO&lt;/SPAN&gt;  points (objectid,shape) &lt;SPAN class=""&gt;VALUES&lt;/SPAN&gt; (&lt;SPAN class=""&gt;1&lt;/SPAN&gt;,SDO_GEOMETRY(&lt;SPAN class=""&gt;2001&lt;/SPAN&gt;, &lt;SPAN class=""&gt;26917&lt;/SPAN&gt;, sdo_point_type(&lt;SPAN class=""&gt;668768.133&lt;/SPAN&gt;,  &lt;SPAN class=""&gt;4869255.3995&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;), &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;));
&lt;SPAN class=""&gt;INSERT&lt;/SPAN&gt; &lt;SPAN class=""&gt;INTO&lt;/SPAN&gt;  points (objectid,shape) &lt;SPAN class=""&gt;VALUES&lt;/SPAN&gt; (&lt;SPAN class=""&gt;2&lt;/SPAN&gt;,SDO_GEOMETRY(&lt;SPAN class=""&gt;2001&lt;/SPAN&gt;, &lt;SPAN class=""&gt;26917&lt;/SPAN&gt;, sdo_point_type(&lt;SPAN class=""&gt;668770.2088&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869306.259&lt;/SPAN&gt;,  &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;), &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;));
&lt;SPAN class=""&gt;INSERT&lt;/SPAN&gt; &lt;SPAN class=""&gt;INTO&lt;/SPAN&gt;  points (objectid,shape) &lt;SPAN class=""&gt;VALUES&lt;/SPAN&gt; (&lt;SPAN class=""&gt;3&lt;/SPAN&gt;,SDO_GEOMETRY(&lt;SPAN class=""&gt;2001&lt;/SPAN&gt;, &lt;SPAN class=""&gt;26917&lt;/SPAN&gt;, sdo_point_type(&lt;SPAN class=""&gt;668817.9545&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869315.0815&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;), &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;));
&lt;SPAN class=""&gt;INSERT&lt;/SPAN&gt; &lt;SPAN class=""&gt;INTO&lt;/SPAN&gt;  points (objectid,shape) &lt;SPAN class=""&gt;VALUES&lt;/SPAN&gt; (&lt;SPAN class=""&gt;4&lt;/SPAN&gt;,SDO_GEOMETRY(&lt;SPAN class=""&gt;2001&lt;/SPAN&gt;, &lt;SPAN class=""&gt;26917&lt;/SPAN&gt;, sdo_point_type(&lt;SPAN class=""&gt;668782.1134&lt;/SPAN&gt;, &lt;SPAN class=""&gt;4869327.1634&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;), &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;, &lt;SPAN class=""&gt;NULL&lt;/SPAN&gt;));&lt;/PRE&gt;&lt;P&gt;&lt;A href="https://dbfiddle.uk/bmFoKShP" target="_blank" rel="nofollow noopener noreferrer"&gt;db&amp;lt;&amp;gt;fiddle&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;And I have a query that selects polygons that intersect at least one point.&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&amp;nbsp; --SDO_Geometry&lt;BR /&gt;  &lt;SPAN class=""&gt;SELECT&lt;/SPAN&gt; poly_objectid,
         pnt_objectid
    &lt;SPAN class=""&gt;FROM&lt;/SPAN&gt; (
          &lt;SPAN class=""&gt;SELECT&lt;/SPAN&gt; poly.objectid &lt;SPAN class=""&gt;as&lt;/SPAN&gt; poly_objectid,
                 pnt.objectid  &lt;SPAN class=""&gt;as&lt;/SPAN&gt; pnt_objectid,
                 &lt;SPAN class=""&gt;row_number&lt;/SPAN&gt;() &lt;SPAN class=""&gt;over&lt;/SPAN&gt;(&lt;SPAN class=""&gt;partition&lt;/SPAN&gt; &lt;SPAN class=""&gt;by&lt;/SPAN&gt; poly.objectid &lt;SPAN class=""&gt;order&lt;/SPAN&gt; &lt;SPAN class=""&gt;by&lt;/SPAN&gt; &lt;SPAN class=""&gt;null&lt;/SPAN&gt;) rn
            &lt;SPAN class=""&gt;FROM&lt;/SPAN&gt; polygons poly
      &lt;SPAN class=""&gt;CROSS&lt;/SPAN&gt; &lt;SPAN class=""&gt;JOIN&lt;/SPAN&gt; points pnt
           &lt;SPAN class=""&gt;WHERE&lt;/SPAN&gt; sdo_anyinteract(poly.shape, pnt.shape) &lt;SPAN class=""&gt;=&lt;/SPAN&gt; &lt;SPAN class=""&gt;'TRUE'&lt;/SPAN&gt;
         )
   &lt;SPAN class=""&gt;WHERE&lt;/SPAN&gt; rn &lt;SPAN class=""&gt;=&lt;/SPAN&gt; &lt;SPAN class=""&gt;1&lt;/SPAN&gt;

   POLY_OBJECTID PNT_OBJECTID
   &lt;SPAN class=""&gt;------------- ------------&lt;/SPAN&gt;
               &lt;SPAN class=""&gt;1&lt;/SPAN&gt;            &lt;SPAN class=""&gt;2&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&lt;SPAN&gt;The query only selects one row per polygon using &lt;FONT face="courier new,courier" color="#0000FF"&gt;row_number()&lt;/FONT&gt; and &lt;FONT face="courier new,courier" color="#0000FF"&gt;WHERE rn = 1&lt;/FONT&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Reason:&lt;BR /&gt;I want to mimic what Select By Location does in ArcGIS Pro.&amp;nbsp;Select By Location only selects a single row per input polygon feature. It doesn't propagate duplicate polygon rows for each point that intersects a given polygon. Whereas database queries &lt;U&gt;&lt;EM&gt;do&lt;/EM&gt;&lt;/U&gt;&amp;nbsp;propagate duplicate polygon rows via the join. That's a typical difference between ArcGIS and full-blown SELECT queries with joins. All of which is expected.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;So, like I said, the query above only selects one row per polygon. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;The sample data and query above are for SDO_Geometry. But the same thing applies to SDE.ST_Geometry:&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&amp;nbsp;&amp;nbsp; --ST_Geometry
&amp;nbsp; SELECT poly_objectid,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pnt_objectid
    FROM (
          SELECT poly.objectid as poly_objectid,
                 pnt.objectid as pnt_objectid,
                 row_number() over(partition by poly.objectid order by null) rn
            FROM polygons poly
      CROSS JOIN points pnt
           WHERE sde.st_intersects (poly.shape, pnt.shape) = 1
         )
   WHERE rn = 1

   POLY_OBJECTID PNT_OBJECTID
   ------------- ------------
               1            2&lt;/PRE&gt;&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;This is how the queries work:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;1. Inner query: Selects multiple polygon rows; one for each intersecting point.&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;POLY_OBJECTID PNT_OBJECTID
------------- ------------
            1            2
            1            4&lt;/PRE&gt;&lt;P&gt;&lt;SPAN&gt;2. Outer query: Only keep one row per polygon. The tie-breaker is arbitrary; it doesn't matter what duplicate row is kept (see&amp;nbsp; &lt;FONT face="courier new,courier" color="#0000FF"&gt;WHERE rn = 1&lt;/FONT&gt;&amp;nbsp; and&amp;nbsp; &lt;FONT face="courier new,courier" color="#0000FF"&gt;order by null&lt;/FONT&gt; ). Related post &lt;A href="https://stackoverflow.com/questions/75861531/use-row-number-window-function-without-specifying-order-by" target="_blank" rel="noopener"&gt;here&lt;/A&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;POLY_OBJECTID PNT_OBJECTID
------------- ------------
            1            2&lt;/PRE&gt;&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;STRONG&gt;Question:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;While the above technique works, it's occurred to me that it might not be the most efficient way to do it. Why initially select multiple intersection matches, when the duplicates will be ignored anyway?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Is there a way to only get the first instance of an intersection, and then stop looking and move on to the next polygon?&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 28 Mar 2023 13:13:45 GMT</pubDate>
      <guid>https://community.esri.com/t5/geodatabase-questions/intersect-get-quot-first-instance-only-quot-when/m-p/1272324#M8359</guid>
      <dc:creator>Bud</dc:creator>
      <dc:date>2023-03-28T13:13:45Z</dc:date>
    </item>
    <item>
      <title>Re: Intersect — Get "first instance only" when using SQL spatial relational functions</title>
      <link>https://community.esri.com/t5/geodatabase-questions/intersect-get-quot-first-instance-only-quot-when/m-p/1272325#M8360</link>
      <description>&lt;P&gt;For example, could EXISTS be used instead of a cross join/cartesian product?&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;A href="https://www.javatpoint.com/in-vs-exists" target="_blank" rel="noopener"&gt;IN vs. EXISTS&lt;/A&gt;&lt;/P&gt;&lt;P&gt;The IN clause scans all records fetched from the given subquery column, whereas EXISTS clause evaluates true or false, and the &lt;STRONG&gt;SQL engine quits the scanning process as soon as it has found a match.&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;To be honest, I don't know how EXISTS could be used in this case. And if it can be used, I'm skeptical that a subquery with EXISTS would perform better than a join, since joins are usually considered to be better performing than subqueries.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any insight would be appreciated.&lt;/P&gt;</description>
      <pubDate>Tue, 04 Apr 2023 05:01:15 GMT</pubDate>
      <guid>https://community.esri.com/t5/geodatabase-questions/intersect-get-quot-first-instance-only-quot-when/m-p/1272325#M8360</guid>
      <dc:creator>Bud</dc:creator>
      <dc:date>2023-04-04T05:01:15Z</dc:date>
    </item>
    <item>
      <title>Re: Intersect — Get "first instance only" when using SQL spatial relational functions</title>
      <link>https://community.esri.com/t5/geodatabase-questions/intersect-get-quot-first-instance-only-quot-when/m-p/1273383#M8365</link>
      <description>&lt;P&gt;Related: &lt;A href="https://stackoverflow.com/questions/75884042/select-polygons-that-intersect-points" target="_blank"&gt;Select polygons that intersect points (improve performance)&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 30 Mar 2023 04:27:39 GMT</pubDate>
      <guid>https://community.esri.com/t5/geodatabase-questions/intersect-get-quot-first-instance-only-quot-when/m-p/1273383#M8365</guid>
      <dc:creator>Bud</dc:creator>
      <dc:date>2023-03-30T04:27:39Z</dc:date>
    </item>
  </channel>
</rss>

