6

我想从 DB2 中检索与 DB1 表中的标识符匹配的记录列表,就像常规的 SAS 子查询一样。如何使用 SAS 直通 SQL 执行该操作?

使用常规的 SAS SQL 在 db1 上执行(长而复杂的)SQL 太慢了,这就是我改用直通 SQL 的原因。

我尝试了以下但没有运气:

proc sql;
    connect to db1 as A (user=&userid. password=&userpw.  database=MY_DB);
    connect to db2 as B (user=&userid. password=&userpw.  database=MY_DB);

    create table test as
    select * from connection to B (
        select * from schema.table
            Where ID_NUM =
                (select * from connection to A
                      (select ID_NUM from schema2.table2)
                );
        );
   disconnect from A;
   disconnect from B;
quit;
4

2 回答 2

3

如果您要连接到单个 DB2 实例并连接不同模式/数据库中的两个表,那么以下内容应该适合您:

proc sql;
    connect to db2 as B (user=&userid. password=&userpw.  database=MY_DB);

    create table test as
    select * from connection to B (
            /* here we're in DB2 SQL */
        select t1.* from schema.table as t1
                inner join schema2.table2 as t2
            on t1.ID_NUM = t2.ID_NUM
        );
   /* automatic disconnect at PROC SQL boundary */
quit;

如果您与两个不同的服务器/两个用户帐户交谈,则可以使用没有传递的异构连接。那么 ID_NUM 值的预期数量将很重要。

于 2013-10-08T19:25:30.913 回答
1

您不能对另一个直通查询执行直通查询,除非您的两个数据库以某种方式自然连接,您可以在本机系统中利用这种方式。

执行此类操作的唯一方法是执行connection to A查询并将结果存储在宏变量(ID_NUM 列表)中,然后将该宏变量插入到connection to B.

最好不要在此处显式使用 passthrough,而是libname像往常一样使用和执行查询。SAS 可能会在这里为您提供帮助并为您完成工作,而无需首先实际复制 B 的所有行。

于 2013-10-08T19:04:28.893 回答