<?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 PROC SQL -- Correlated Subquery Capabilities Compared to SQL Server in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Correlated-Subquery-Capabilities-Compared-to-SQL-Server/m-p/421250#M280775</link>
    <description>&lt;P&gt;I have a quick question about correlated subqueries in PROC SQL. I am curious whether a specific functionality that exists in Microsoft's SQL Server also exists in PROC SQL.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please see the queries below. Query #1, involving a simple join, runs fine in both PROC SQL and SQL Server's T-SQL.&amp;nbsp; Query #2, though, which uses a &lt;U&gt;&lt;STRONG&gt;correlated subquery within the SELECT clause&lt;/STRONG&gt;&lt;/U&gt;, works great&amp;nbsp;in SQL Server's T-SQL but &lt;STRONG&gt;not&lt;/STRONG&gt; in PROC SQL.&amp;nbsp; Would you know whether this functionality exists&amp;nbsp;in some other way in PROC SQL? If it does, what might the syntax look like?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance for your help. And &lt;STRONG&gt;please&lt;/STRONG&gt;:&amp;nbsp;I know this is a non-standard thing to do in SQL and I know it is inefficient. I'm just curious whether the functionality exists in PROC SQL. There are situations where it is useful. Thanks again!&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;FONT face="courier new,courier" size="1 2 3 4 5 6 7"&gt;PROC SQL;
    *---- create some play data -------------------------------------*;
    CREATE TABLE table1 (ID INT, FirstName CHAR(12));
    INSERT INTO table1 (ID, FirstName) VALUES (1, "Tom" );
    INSERT INTO table1 (ID, FirstName) VALUES (2, "Richard" );
    INSERT INTO table1 (ID, FirstName) VALUES (3, "Harry");

    CREATE TABLE table2 (ID INT, HomeTown CHAR(12));
    INSERT INTO table2 (ID, HomeTown) VALUES (2, "Boston");
    INSERT INTO table2 (ID, HomeTown) VALUES (3, "Miami" );
    *----------------------------------------------------------------*;
   &lt;STRONG&gt; &lt;FONT color="#0000FF"&gt;*Query #1 -- this works fine in both PROC SQL and SQL Server's T-SQL;&lt;/FONT&gt;&lt;/STRONG&gt;
&lt;STRONG&gt;    SELECT    table1.ID,
              table1.FirstName,
              table2.HomeTown

    FROM      table1
    LEFT JOIN table2 ON (table1.ID = table2.ID);&lt;/STRONG&gt;
    *----------------------------------------------------------------*;
    &lt;FONT color="#0000FF"&gt;&lt;STRONG&gt;*Query #2 -- This works fine in SQL Server's T-SQL but apparently &lt;U&gt;not&lt;/U&gt; in PROC SQL;&lt;/STRONG&gt;&lt;/FONT&gt;
 &lt;STRONG&gt;   SELECT    table1.ID,
              table1.FirstName,
              &lt;FONT color="#0000FF"&gt;HomeTown = (SELECT HomeTown FROM table2 WHERE table2.ID=table1.ID)&lt;/FONT&gt;
&lt;BR /&gt;    FROM      table1;&lt;/STRONG&gt;
    *----------------------------------------------------------------*; 
&lt;BR /&gt;QUIT;&lt;/FONT&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 14 Dec 2017 17:17:17 GMT</pubDate>
    <dc:creator>twhite</dc:creator>
    <dc:date>2017-12-14T17:17:17Z</dc:date>
    <item>
      <title>PROC SQL -- Correlated Subquery Capabilities Compared to SQL Server</title>
      <link>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Correlated-Subquery-Capabilities-Compared-to-SQL-Server/m-p/421250#M280775</link>
      <description>&lt;P&gt;I have a quick question about correlated subqueries in PROC SQL. I am curious whether a specific functionality that exists in Microsoft's SQL Server also exists in PROC SQL.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please see the queries below. Query #1, involving a simple join, runs fine in both PROC SQL and SQL Server's T-SQL.&amp;nbsp; Query #2, though, which uses a &lt;U&gt;&lt;STRONG&gt;correlated subquery within the SELECT clause&lt;/STRONG&gt;&lt;/U&gt;, works great&amp;nbsp;in SQL Server's T-SQL but &lt;STRONG&gt;not&lt;/STRONG&gt; in PROC SQL.&amp;nbsp; Would you know whether this functionality exists&amp;nbsp;in some other way in PROC SQL? If it does, what might the syntax look like?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance for your help. And &lt;STRONG&gt;please&lt;/STRONG&gt;:&amp;nbsp;I know this is a non-standard thing to do in SQL and I know it is inefficient. I'm just curious whether the functionality exists in PROC SQL. There are situations where it is useful. Thanks again!&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;FONT face="courier new,courier" size="1 2 3 4 5 6 7"&gt;PROC SQL;
    *---- create some play data -------------------------------------*;
    CREATE TABLE table1 (ID INT, FirstName CHAR(12));
    INSERT INTO table1 (ID, FirstName) VALUES (1, "Tom" );
    INSERT INTO table1 (ID, FirstName) VALUES (2, "Richard" );
    INSERT INTO table1 (ID, FirstName) VALUES (3, "Harry");

    CREATE TABLE table2 (ID INT, HomeTown CHAR(12));
    INSERT INTO table2 (ID, HomeTown) VALUES (2, "Boston");
    INSERT INTO table2 (ID, HomeTown) VALUES (3, "Miami" );
    *----------------------------------------------------------------*;
   &lt;STRONG&gt; &lt;FONT color="#0000FF"&gt;*Query #1 -- this works fine in both PROC SQL and SQL Server's T-SQL;&lt;/FONT&gt;&lt;/STRONG&gt;
&lt;STRONG&gt;    SELECT    table1.ID,
              table1.FirstName,
              table2.HomeTown

    FROM      table1
    LEFT JOIN table2 ON (table1.ID = table2.ID);&lt;/STRONG&gt;
    *----------------------------------------------------------------*;
    &lt;FONT color="#0000FF"&gt;&lt;STRONG&gt;*Query #2 -- This works fine in SQL Server's T-SQL but apparently &lt;U&gt;not&lt;/U&gt; in PROC SQL;&lt;/STRONG&gt;&lt;/FONT&gt;
 &lt;STRONG&gt;   SELECT    table1.ID,
              table1.FirstName,
              &lt;FONT color="#0000FF"&gt;HomeTown = (SELECT HomeTown FROM table2 WHERE table2.ID=table1.ID)&lt;/FONT&gt;
&lt;BR /&gt;    FROM      table1;&lt;/STRONG&gt;
    *----------------------------------------------------------------*; 
&lt;BR /&gt;QUIT;&lt;/FONT&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Dec 2017 17:17:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Correlated-Subquery-Capabilities-Compared-to-SQL-Server/m-p/421250#M280775</guid>
      <dc:creator>twhite</dc:creator>
      <dc:date>2017-12-14T17:17:17Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL -- Correlated Subquery Capabilities Compared to SQL Server</title>
      <link>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Correlated-Subquery-Capabilities-Compared-to-SQL-Server/m-p/422006#M280776</link>
      <description>&lt;P&gt;It will run, it just doesn't do anything useful.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data table1;
   input id FirstName $10.;
datalines;
1 Tom
2 Richard
3 Harry
;
run;

data table2;
   input id HomeTown $10.;
datalines;
2 Boston
3 Miami
4 Nome
;
run;

proc sql; 
	SELECT    table1.ID,
              table1.FirstName,
              (SELECT HomeTown FROM table2 WHERE table2.ID=table1.ID) as hometown
    FROM      table1, table2;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Provides&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The SAS System&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 09:15 Monday, December 18, 2017&amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id&amp;nbsp; FirstName&amp;nbsp;&amp;nbsp; hometown&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp; Tom&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp; Tom&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp; Tom&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp; Richard&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Boston&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp; Richard&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Boston&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp; Richard&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Boston&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp; Harry&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Miami&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp; Harry&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Miami&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp; Harry&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Miami&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 18 Dec 2017 15:32:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Correlated-Subquery-Capabilities-Compared-to-SQL-Server/m-p/422006#M280776</guid>
      <dc:creator>HB</dc:creator>
      <dc:date>2017-12-18T15:32:15Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL -- Correlated Subquery Capabilities Compared to SQL Server</title>
      <link>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Correlated-Subquery-Capabilities-Compared-to-SQL-Server/m-p/422078#M280777</link>
      <description>&lt;P&gt;Thanks so much! And what your code does is VERY useful -- there are many instances where a correlated subquery is much easier and straightforward than a ton of reflexive joins. I know this is a comically simple example, but rest assured you've saved me a LOT of work!&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I just had to switch your code so that it does a LEFT join with the second table and it gave me exactly what I needed (see below)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks again for your help! I figured SAS had this capability. The syntax is just a tiny bit different from that of SQL Server, and I had searched all over for it without success.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366FF"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier" size="1 2 3 4 5 6 7"&gt;SELECT&amp;nbsp; &amp;nbsp; &amp;nbsp; table1.ID,&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366FF"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier" size="1 2 3 4 5 6 7"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; table1.FirstName,&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#3366FF"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier" size="1 2 3 4 5 6 7"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (SELECT HomeTown FROM table2 WHERE table2.ID=table1.ID) AS HomeTown&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#3366FF"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier" size="1 2 3 4 5 6 7"&gt;FROM table1 &lt;FONT color="#800080"&gt;LEFT JOIN&lt;/FONT&gt; table2 on table1.id=table2.id;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 18 Dec 2017 18:24:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Correlated-Subquery-Capabilities-Compared-to-SQL-Server/m-p/422078#M280777</guid>
      <dc:creator>twhite</dc:creator>
      <dc:date>2017-12-18T18:24:24Z</dc:date>
    </item>
  </channel>
</rss>

