2012-05-10 50 views
0

我试图执行下面的SQL语句(内置和SQL Server 2005测试)SQL SELECT语句,使用JET.OLEDB司机

Select * 
From mytesttable 
where myPk in 
(
     select t3 from (
      select field1, substring(field3, charindex(":", field3),6) t2, min(mypk) t3 
      from mytesttable 
      group by field2, substring(field3, charindex(":", field3),6) 
    ) t 
) 

我知道我不能使用子或charindex。所以最里面的选择看起来像这样在vbs:

strsql = "select mid(field3, instr(1, field3, ":")), min(mypk) from " 
strsql = strsql & myCSVFileName 
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ":")) " 

这运行良好。

但是,当我尝试添加下一个选择来包装最内层的选择,它失败。代码如下所示:

strsql = "select mypk from (select mid(field3, instr(1, field3, ":")), min(mypk)  from " 
strsql = strsql & myCSVFileName 
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ":")))" 

该错误消息我得到的是,有

为一个或多个必需参数

任何建议给予没有价值? 谢谢。

回答

0

您的字符串中存在一些错误,但在Jet中不需要为派生表提供别名。

您已经重复使用csv名称的行,如果应该使用单引号或双引号,并且没有名为mypk的字段返回,则使用了双引号。这适用于我,但只有字段3总是包含冒号的文本。

myCSVFileName = "Table.csv" 
strsql = "select pk from (select mid(field3, instr(1, field3, ':')), min(mypk) as pk from " 
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ':')))" 
1

我不知道Jet,但在SQL Server和其他平台中,派生表必须是别名。换句话说,你需要

... FROM (select ...) AS YouMustProvideAnAliasForThisDerivedTable 

而且要小心使用每一个你提到一列时间(mypk与myPk)相同的外壳,不过这似乎并不在这里是问题。

+0

使用MS Access(Jet/ACE)时不需要别名派生表, – Fionnuala