sql语句中in的用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句中in的用法相关的知识,希望对你有一定的参考价值。
其实是一个php订单系统,订单表里存的是id号,格式是1@2@3@,也就是说每一个ID中间用@隔开的。我现在想提取出所有的产品名称,我的写法是:select * from table WHERE id IN ('$d11') order by id desc"; 其中$d11这个变量就是表中存的id(1@2@3@)。我要问的是我这么写之后为什么只显示第一个id号的产品,也是就id是1的产品。 应该怎么写才能都显示出来。
like 当然不行, 这位仁兄好像对like不是很了解啊。
你可以自己写一个返回数据集的函数来将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是先执行外查询,再执行子查询,找到外查询记录后和只查询对比符合条件的,如果外查询和子查询的条目数差异很大,那么效率相差很明显的。 参考技术A 你这样构造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条件上来说. 参考技术B 没有这样用的,估计是写错了,应该是半角点“.”。score!
course应该是score.course表示数据库score的course表 参考技术C 我刚才好像回答过一个了
触发器主要的作用是:不能插入00000001的编号
create
trigger
tri_insert----触发器名
on
student--表名
for
insert--插入操作
as
declare
@student_id
char(10)--定义变量
select
@student_id=s.student_id
from
--把符合条件的id赋值给变量
student
s
inner
join
inserted
i
on
s.student_id=i.student_id
if
@student_id='0000000001'--如果id=''0000000001''
begin
raiserror('不能插入1的学号!',16,8)--提示信息:不能插入1的学号
rollback
tran--语句发回
不执行插入操作的
end
go
] 参考技术D in 里面不同的id是要用逗号隔开的in(1@,2@) 如果i是字符型的 每个id 都要加上单引号本回答被提问者和网友采纳
sql语句中怎么实现in中的模糊查询
现在有这么一个问题,有一个phone的字段,我想提取哪些是移动的号码,于是想按号段查询... where phone in ('134%','135%'....);但发现in方法中用不了模糊查询,而用like or的方法又太麻烦,毕竟号段有十几个,所以有没有什么简单的方法,求教?
1、开启数据库管理工具,打开SQL语言编写窗体。
2、如果我们知道某字段的开头部分,我们可以用 like ‘xx%' select TOP 10 * from CK_ATE where Model like 'PSM24W%'。
3、如果我们知道某字段的中间部分,可以使用 like ‘%xx%’select TOP 10 * from CK_ATE where Model like '%24W%'。
4、如果我们知道某字段的结尾部分,我们库使用 like '%xx'select TOP 10 * from CK_ATE where Model like '%-R-FA1'。
5、补充一 上例中的 "like" 是模糊查询的关键词。
6、补充二 、 模糊查询可能涉及比较大的数据量,为避免查询时把数据库资源耗尽,我们加上一些限制条件 比如 前10行 top 10。
参考技术A where substr(phone,0,3) in ('134','135');通过截取phone的前三位,要学会变通本回答被提问者采纳 参考技术B 模糊查询要活用啊
where phone like '13[45]%'
这样可以去除134或135开头的数据 参考技术C substring(phone,1,3) in ('134','135',...) 参考技术D where left(phone,3) in ('134','135'……)
以上是关于sql语句中in的用法的主要内容,如果未能解决你的问题,请参考以下文章
select-sql语句in的用法,在mybatis中sql中in是怎么用的