sql语句中in的用法
其实是一个php订单系统,订单表里存的是id号,格式是1@2@3@,也就是说每一个ID中间用@隔开的。我现在想提取出所有的产品名称,我的写法是:select*fromta...
其实是一个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不是很了解啊。 展开
like 当然不行, 这位仁兄好像对like不是很了解啊。 展开
6个回答
展开全部
你这样构造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是先执行外查询,再执行子查询,找到外查询记录后和只查询对比符合条件的,如果外查询和子查询的条目数差异很大,那么效率相差很明显的。
你可以自己写一个返回数据集的函数来将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的范围不对.
你这样是把in后面处理成一个字符串了,
而in后面跟的应该是一个范围.
你可以自己写一个返回数据集的函数来将aa.ddid值处理成in的范围,
类似于:
假设函数:
ft01(nvarchar(1000))
returns
table
tb
(val
int)
那么,
这样更新里面子查询的in条件:
where
id
in
(select
val
from
ft01(aa.ddid))
另外,
此解决方法只是从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条件上来说.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有这样用的,估计是写错了,应该是半角点“.”。score!
course应该是score.course表示数据库score的course表
course应该是score.course表示数据库score的course表
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我刚才好像回答过一个了
触发器主要的作用是:不能插入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
]
触发器主要的作用是:不能插入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
]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
in 里面不同的id是要用逗号隔开的in(1@,2@) 如果i是字符型的 每个id 都要加上单引号
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |