2012-05-10 128 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