[SQL语句]关于IN的一个问题

作者&投稿:中乳 (若有异议请与网页底部的电邮联系)
sql语句中in的用法~

你这样构造in的范围不对。你这样是把in后面处理成一个字符串了。而in后面跟的应该是一个范围。
你可以自己写一个返回数据集的函数来将aa.ddid值处理成in的范围,
类似于:
假设函数:
ft01(nvarchar(1000))
returns
table
tb
(val
int)。
那么,
这样更新里面子查询的in条件:
where
id
in
(select
val
from
ft01(aa.ddid))。
另外,
此解决方法只是从in条件上来说。
如果子查询只有1条记录,in和=是没有区别,如果子查询有多条记录,用=会出错的,所以in是无论只查询有多少条记录都可以使用,而=只有当子查询只有1条记录的时候才能使用。
in和exists理解上其实是差不多,但对数据库而言,in的执行顺序是先执行只查询条件,然后把记录和外查询核对,找符合条件的。
而exists是先执行外查询,再执行子查询,找到外查询记录后和只查询对比符合条件的,如果外查询和子查询的条目数差异很大,那么效率相差很明显的。

不是的。in是只要有满足条件的就能查询出来。=是必须全满足。



SELECT SUM(Price) from Table1 where ID in('58,4413,7471,7083,7085,7308,6979')
相当于
SELECT SUM(Price) from Table1 where ID ='58' or id='4413' or id='7471' or id ='7083' or id='7085' or id ='7308' or id='6979')

直接写数组名当然不行,你那个数组明显是程序中定义的,不能在sql中使用。
sql中是不能使用数组的。只有像oracle的pl/sql一类sql扩展程序中能定义数组,但也不是你那种写法。

如果数组是固定值,AA是数字型,这样写就可以了:
SELECT * FROM TABLE WHERE AA IN (1,45,375,48,98,46)
AA是字符型就加单引号:
SELECT * FROM TABLE WHERE AA IN ('1','45','375','48','98','46')

如果数组是变量,就只能构造查询字符串:
"SELECT * FROM TABLE WHERE AA IN ("&Ary(0)&","&Ary(1)&","&Ary(2)&","&Ary(3)&","&Ary(4)&","&Ary(5)&")"
同样,AA是字符型就在构造时加单引号。
-----------------------------------------------------------
数组元素值是未知的?不太明白你的意思。
如果是未知的就没法查询,必需有确定值才能用sql来查询。
如果是变量,按上面数组变量的方式来写不就行了吗?当然首先要给变量赋值才行。
-----------------------------------------------------------
呵呵,是这样啊,这个也不难啊,用UBound函数取数组最大下标,构造sql查询串时循环最大下标次不就行了么?类似下面这样的写法:
sql = "SELECT * FROM TABLE WHERE AA IN (" '初始化查询字符串
For i = 0 to UBound(Ary) '从0循环到数组最大下标
sql = sql & Ary(i) & "," '将数组中每个值加在查询字符串后面
Next
sql = Left(sql,Len(sql)-1) & ")" '将最后一个逗号换为反括号

(如果用java就用Ary.ubound方法,同样的效果。)

楼上是正确的,不过注意符号。


高手帮我看看这两个SQL语句是什么意思,里面是B.和I.是做什么用的?
B和I是两个表的表名字!!!条件连接!!

求助高手帮我看一下下面两段sql语句是什么意思,输出结果有什么区别么...
list list_type;--定义一个list_type数组下标为自增长,使得每次往list_type里面加入一个下标不需要extend一个空间 begin for i in 1..8 loop --从1到8的循环 list(i):=i*i;dbms_output.put_line(list(i));end loop;end;语句块输出的为:1,4,9,16,25,36,49,64。--- declare...

i will insert it into my SQL!是什么意思
将它插入我的数据库

C# 把SQL查询结果赋值到int i
int i = Convert.ToInt32(DataBaseOper.ExcuteScalar(sql));试试

DELPHI怎么获取SQL指定字段的字段类型
select * from 数据库.dbo.syscolumns where object_name(id)='表名'varname: string;FieldType: TFieldType;i, size: integer;beginfor i := 0 to ads.Fields.Count - 1 dobeginname := ads.Fields[i].FieldName; \/\/列名FieldType := ads.Fields[i].DataType; \/\/字段类型size := ads...

用ISQL -Usa -P -i这个命令在开始,运行中输入,进行控制数据库于用查询...
-i 参数是指定input对象的 操作用户为-U参数 在此基础上与其他第三方查询分析器是等同的,可以通过sysprocess查看 ——不过isql除了上述参数外 还可以执行一些数据库服务的其他命令,例如安装卸载运行组件等、执行备份恢复等,则是查询分析器之外的功能了 ...

sql server 中 begin end 是什么意思??
SQL Server中使用语言是T-SQL。在T-SQL中,Begin表示语句块的开始;End表示语句块的结束。Begin和End类似于C语言中表示语句块的左花括号{ 和右花括号 } 例如 if @i > 100 -- 判断 -- 如果条件成立,执行这个语句块 begin selete * from DevieInfo where DeviceId = @i print '...

写sql语句:两张表A: ID,INAME B:Bname,ID 现在要向表B输入我有的两个...
假设以上两个问题回答都是Yes,则需要:1、先插入A表 2、保证A插入成功,才能获取A表最新生成的ID,并将此ID插入B。判断是否出错用@@error,0表示对,非0表示出错 获得刚插入的ID可以用scope_identity(),所以sql语句是:insert into A (INAME) values(INAME) --插入A,你的值咋跟字段一个...

求一SQL语句!选择yy表中“uu”(唯一的)所在的那行的第i列的值!
select i from yy where uu=i

sql 四舍五入问题?
Round函数(四舍六入五成双)(转)2007-06-09 15:20Round(所在单元:Math)功能说明:对一个实数进行四舍五入。(按照银行家算法)参考实例:var I, j: Integer;begin i := Round(1.5); \/\/ i等于2 j := Round(2.5); \/\/ j等于2 \/\/注意Round(2.53)=3 end;在Delphi中使用Round函数得到...

铁山港区17896055740: [SQL语句]关于IN的一个问题 -
柴娇美百: 直接写数组名当然不行,你那个数组明显是程序中定义的,不能在sql中使用.sql中是不能使用数组的.只有像oracle的pl/sql一类sql扩展程序中能定义数组,但也不是你那种写法.如果数组是固定值,AA是数字型,这样写就可以了:SELECT * ...

铁山港区17896055740: 请教一个sql in语句的问题 -
柴娇美百: 如果liming和lm是两个内容的话,用这个 select * from t_user where username in...

铁山港区17896055740: 请教一个关于SQL语句中in的相关问题 -
柴娇美百: 拜托,int [] cID 这个变量时.net程序里面的数组, sql=“”语句则是要放到sql2005这个dbms里面执行,他们两个是不同的系统怎么能直接写在sql里面??如果你要那样实现,应该先把cID这样的数组值先insert到一个临时表里面,然后在sql里...

铁山港区17896055740: 关于SQL语句IN的查询问题 -
柴娇美百: 应该用CHARINDEX() select * from T where charindex('2',a) > 0 in可以理解为在一个集合里.

铁山港区17896055740: sql 语句中 = 和 in 的区别 -
柴娇美百: SQL 中,等于就是唯一条件,例如id = 1,那么就查出id 是 1的数据行.而in 或者 not in 就是在某个范围内或者不在某个范围内.当一个查询是另一个查询的条件时,称之为子查询.其实这也就是嵌套查询.例如 selete top 10 from student where age > 10 查找年龄大于10岁的孩子的前十个.where age > 10就是作为子查询的存在.你上面问的in 之类的,其实一般也是用于嵌套查询的.

铁山港区17896055740: SQL 查询中的in 的作用是用来做什么的 基础类 -
柴娇美百: 用来判断某属性的取值是否在某范围内.如楼上的例子,取姓名属性为张三和李四的学生

铁山港区17896055740: SQL语句的问题 当子查询返回多值的时候 我用什么语句去达到IN的效果呢? -
柴娇美百: 对于in 和 exists的性能区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists. 其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系. 另外IN是不对NULL进行处理.

铁山港区17896055740: Sql语句中IN和exists的区别及应用 -
柴娇美百: in和exists in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询.如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: 例如:表A(小表),表B(大表)1:select * from ...

铁山港区17896055740: sql语句 in如何限定个数? -
柴娇美百: 只取前面N个的话可以用TOP select * from tb where id in(top N ...)要分成多个输出要用临时表,建立一个临时表,定义一个自增加字段id.把IN后面的结果集插入到临时表,在临时表通过id分

铁山港区17896055740: SQL中语句select * into persons in 'Backup.mdb' from persons对吗? -
柴娇美百: in你确定可以放在这里?我没见过,为什么不直接用 select * into db1.persons from db2.persons这种形式,另外对两个数据库操作之前需要连接两个数据库

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网