|
问题:
| 关于IN子句用参数代替时,多参数该如何处理? 如何编写删除id where in(1,2,3,4,5) 的查询 DELETE Article.ID FROM Article WHERE (((Article.ID) In ([@IDs]))); |
IDs的值单独为一个的时候可以删除,两个以上的值就不行了 |
回答:
| DELETE Article.ID FROM Article WHERE (((Article.ID) In ([@IDs]))); |
参数只允许有一个,如果你在[@IDs]里面填写 1,2,3仍然被作为一个参数,而不是3个。 如果你要达到你需要的效果,必须用 VBA 来组织 jet SQL 语句 dim strsql as string dim strIn as string strIn="1,2,3" strsql="DELETE Article.ID FROM Article WHERE Article.ID In (" & strIn & ")" currentproject.connection.execute strsql |
在 SQL SERVER 中也会有类似的问题,这里也同样有解决方法 declare @sql nvarchar(200) declare @table_name nvarchar(200) declare @in_string nvarchar(200) select @table_name='table1' select @in_string='11,34,55,6,7,8' set @sql='select * from ' + @table_name + ' where fieldname in (' + @in_string + ')' execute(@sql) |
|
问题:
| 数据库排序问题!有记录集,如何显示给定ID顺序排序以及显示相关记录! 如我有一组数据array_id="50,23,1,56,35,80" 要求从数据库中显示相应的记录并按照相应顺序显示记录!如何才能实现?我用的是ACCESS数据库。 关键是如何按照 array_id="50,23,1,56,35,80" 这个ID顺序排序,取出记录是可以用 in 语句,如何得到排序是: Id 字段1 50 内容2 23 内容3 1 内容4 56 内容5 35 内容6 80 内容7 |
回答:
| array_id 可以生成一个字符串来组织 SQL 的 IN 子句 | select * from 表名 where 字段 in (50,23,1,56,35,80) order by 字段 |
但是注意!该结果不会按照 Id 字段1 50 内容2 23 内容3 1 内容4 56 内容5 35 内容6 80 内容7 这样的顺序来排序的。IN 子句只是用于获取记录,不是用来排序的,如果你一定要排序可以用临时表解决 临时表结构类似如下: ID,OrderID 50 1 23 2 1 3 56 4 35 5 80 6 | select * from 表名 innser join 临时表 on 表名.id= 临时表.id order by 临时表.OrderId |
当然,如果你不用临时表,而用 SWITCH 或者 IIF 函数来生成 Order By 顺序也可以,但是那样在记录稍多时效率很差。 |
本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。
access911.net 原创文章,作者本人对文章保留一切权利。 如需转载必须征得作者同意并注明本站链接
|
|