sql - SAS 直通 SQL - 多个数据库

标签 sql sas pass-through

我想从 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;

最佳答案

如果您连接到单个 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 值的预期数量将很重要。

关于sql - SAS 直通 SQL - 多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19255905/

相关文章:

SQL将名称的第一个和最后一个字母大写

sql - 如何在 ANSI SQL 中进行 EXISTS 选择

SAS proc Freq & gchart 显示附加值的频率/条

R glm标准误差估计与SAS PROC GENMOD的差异

mysql - 如何从联结表中多次引用单个表

sql - Linq to SQL 在一个查询中更新多条记录

arrays - 数组调用缺失与将数组的每个元素设置为零之间的区别

sql-server - 如何使用 Access VBA 中的传递查询执行 SET IDENTITY_INSERT ON/OFF?

sql - 为什么 ms-access sql 传递在 VBA 中不起作用