【发布时间】:2016-03-20 09:45:07
【问题描述】:
我的第一个问题长期潜伏在这里。
我有以下表格:
- 帐户
- 电子邮件
- 电话号码
我想从 Accounts 中获取所有内容,对于每条 Accounts 记录,从 Emails 和 PhoneNumbers 中获取最新的 Top 1,其中 Accounts.ID = Emails.AcctID 或 Accounts.ID = PhoneNumbers.AcctID。
我的 RS 目前是: 从帐户中选择 ACCT.* 作为 ACCT OUTER APPLY(从电子邮件中选择前 1 个 E.* 作为 E.E_AcctID = ACCT.ACCT_ID ORDER BY E.E_ID DESC)EM OUTER APPLY(从电话号码中选择前 1 个 PH.* 作为 PH WHERE PH.PH_AcctID = ACCT.ACCT_ID ORDER BY PH_ID DESC) PH WHERE ACCT.ACCT_Status > 2;
问题在于并非每个帐户在电子邮件或电话号码中都有相应的记录。
所以,一些 APPLY RS 是空的,然后我收到这个 RS 错误:ADODB.Recordset error '800a0cc1' Item cannot be found in the collection对应于请求的名称或序号。
知道如何处理空记录集吗?
提前非常感谢。干杯,诺亚
【问题讨论】:
-
1) 标记正在使用的 dbms(我猜它应该是 sql server)2) 发布一些示例数据 3) 发布您的尝试到目前为止
-
正如@vkp 所说,更多数据会很有用。话虽如此,根据我的经验,加入窗口函数比外部应用更快,并且应该只返回空值。
-
感谢您的反馈!将根据您的建议进行更新。干杯,N
-
user2538042,我怎样才能使用 JOINS 并且仍然只能从每个连接的表中获取 TOP 1 记录?
标签: sql sql-server tsql join outer-apply