我想从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;
答案 0 :(得分: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值就很重要了。
答案 1 :(得分:1)
您不能对另一个传递查询执行传递查询,除非您的两个数据库以某种方式自然连接,您可以在本机系统中利用这些连接。
执行此类操作的唯一方法是执行connection to A
查询并将结果存储在宏变量(ID_NUM列表)中,然后将该宏变量插入查询{{1 }}
最好不要在这里明确使用passthrough,而是使用connection to B
并像往常一样执行查询。 SAS可能会帮助你在这里完成工作,而不是先实际复制B的所有行。