【发布时间】:2013-10-03 20:35:00
【问题描述】:
我正在转换一些旧代码以使其更优化,所以我卡在这里我可以通过触发 2 个存储过程来以旧方式执行此操作,但我在想是否可以使用我尝试但无法正确执行的连接所以任何帮助都会很棒
我的旧代码和查询
dataset = Select data1,data2,data3 from table where column1='somevalue'
//now consider dataset have the records of the above query then
foreach (row in dataset)
{
Select top 1 tab2data,tab2data from table2 with (nolock) where LtrFileName = row.data1
//Do some more functionality i can handle this part
}
所以我试图通过连接来组合这两个查询,我用左连接得到了正确的结果,但我无法弄清楚 top 1 如果将它与连接一起应用它会给出错误的输出。所以基本上我问的是有一种方法可以将这两个查询放入一个存储过程中并避免所有 foreach 编码部分。
更新 抱歉,如果我不清楚,但这是它给出的第一个查询的原始输出
data1 data2 data3 data4
001000 002142 NBIS1N 20130514
001000 002142 NBIS1R 20130514
001000 002142 NBTB1N 20130514
001000 002142 NBTB1R 20130514
这些都是记录
tab2data1 tab2data2 data3 tab2data3
NULL NULL NBIS1N 239
NBIS1R_20100323.pdf 000110-Acct_Rec_Mgmt NBIS1R 349
NBIS1R_20100324.pdf 000110-Acct_Rec_Mgmt NBIS1R 349
NBTB1N_20100323.pdf 000110-Acct_Rec_Mgmt NBTB1N 508
NBTB1N_20100324.pdf 000110-Acct_Rec_Mgmt NBTB1N 508
NULL NULL NBTB1R 1360
现在执行第二个查询后,我得到的只有四行,如下所示
tab2data1 tab2data2 data3 tab2data3
NULL NULL NBIS1N 239
NBIS1R_20100324.pdf 000110-Acct_Rec_Mgmt NBIS1R 349
NBTB1N_20100324.pdf 000110-Acct_Rec_Mgmt NBTB1N 508
NULL NULL NBTB1R 1360
【问题讨论】:
-
使用数据库连接表,而不是先全部加载到内存中。
-
我尝试使用左连接加入,但它给出了 table2 的 2 行,我只想要我卡住的前 1 行
-
这些表是如何通过
data3链接的? -
我在下面编辑了我的答案。我假设上面的最后一个结果是您想要的结果,不是吗?
-
是的,这就是我想要的结果
标签: sql sql-server sql-server-2008 join left-join