sql语句写法
(1)selectu.unitfromusersasuwhereu.user_id='01'(2)selects.部门名,s.领用人,s.仪器名称,s.型号,s.单价,s...
(1)select u.unit from users as u where u.user_id='01'
(2)select s.部门名,s.领用人,s.仪器名称,s.型号,s.单价,s.存放地 from s where s.部门号= u.unit
将上面的2个语句合并为一个语句,其中第一句查出的u.unit =0102,0202
第二句再查的时候要将第一句中u.unit指向的所有部门信息都查找出来,即 where子句里 部门号=0102 or 部门号=0202
也就是:用户user_id为01的这个员工管理0102和0202这2个部门,想要知道user_id为01的这个员工管理的所有部门的所有资产! 展开
(2)select s.部门名,s.领用人,s.仪器名称,s.型号,s.单价,s.存放地 from s where s.部门号= u.unit
将上面的2个语句合并为一个语句,其中第一句查出的u.unit =0102,0202
第二句再查的时候要将第一句中u.unit指向的所有部门信息都查找出来,即 where子句里 部门号=0102 or 部门号=0202
也就是:用户user_id为01的这个员工管理0102和0202这2个部门,想要知道user_id为01的这个员工管理的所有部门的所有资产! 展开
4个回答
展开全部
朋友,一楼的回答,您的理解是错误的。
in语句,本身就是or,而不是and。in ('0102','0202'),就是表示部门号等于其中任何一个都符合条件的情况,所以一楼写的这个写法是正确的,你查不到肯定是别的原因。
如果你觉得不对,你可以试试select s.部门名,s.领用人,s.仪器名称,s.型号,s.单价,s.存放地 from s where s.部门号 in ('0102','0202'),这个肯定是可以查询出来这两个的。
除了使用in的写法,还可以使用另外的写法。
select s.部门名,s.领用人,s.仪器名称,s.型号,s.单价,s.存放地 from s, users u where s.部门号= u.unit and u.user_id = '01'
这个写法肯定也是可以的。
in语句,本身就是or,而不是and。in ('0102','0202'),就是表示部门号等于其中任何一个都符合条件的情况,所以一楼写的这个写法是正确的,你查不到肯定是别的原因。
如果你觉得不对,你可以试试select s.部门名,s.领用人,s.仪器名称,s.型号,s.单价,s.存放地 from s where s.部门号 in ('0102','0202'),这个肯定是可以查询出来这两个的。
除了使用in的写法,还可以使用另外的写法。
select s.部门名,s.领用人,s.仪器名称,s.型号,s.单价,s.存放地 from s, users u where s.部门号= u.unit and u.user_id = '01'
这个写法肯定也是可以的。
追问
按照你说的,我用in ('0102','0202')查了下,可以查到我要的结果,可是为什么改成in(select u.unit from users as u where u.user_id='01')就查不到结果了呢?
select u.unit from users as u where u.user_id='01' 单独用这个语句查询出来的结果如图
追答
你这个结果,和('0102','0202')是完全不同的效果。
('0102','0202')其实相当于SELECT里面返回了两行,一行是0102,而另一行是0202,而你这个结果返回的其实是一行,即'0102,0202',所以,你这个IN查询不到结果就肯定了。
试试这么写吧
select s.部门名,s.领用人,s.仪器名称,s.型号,s.单价,s.存放地 from s, users u where charindex(s.部门号,u.部门编号) > 0 and u.user_id = '01'
不知道您用的什么数据库,这个CHARINDEX是SQLSERVER函数
charindex(s.部门号,u.部门编号) > 0,表示在U.部门编号这个结果中包含了S.部门号的数据。
展开全部
select 部门名,领用人,仪器名称,型号,单价,存放地
from s
where 部门号 in ( select distinct unit as 部门号 from users where user_id='01' )
或
select 部门名,领用人,仪器名称,型号,单价,存放地
from s a
where exists ( select * from users where user_id='01' and unit=a.部门号)
from s
where 部门号 in ( select distinct unit as 部门号 from users where user_id='01' )
或
select 部门名,领用人,仪器名称,型号,单价,存放地
from s a
where exists ( select * from users where user_id='01' and unit=a.部门号)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、对于第一种重复,比较容易解决,使用
select distinct * from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录,可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
2、这类重复问题通常要求保留重复记录中的第一条记录,*作方法如下
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from
tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by
Name,autoID
select * from #Tmp where autoID in(select autoID from
#tmp2)
最后一个select即得到了Name,Address不重复的结果集
更改数据库中表的所属用户的两个方法
大家可能会经常碰到一个数据库备份还原到另外一台机器结果导致所有的表都不能打开了,原因是建表的时候采用了当时的数据库用户……
select distinct * from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录,可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
2、这类重复问题通常要求保留重复记录中的第一条记录,*作方法如下
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from
tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by
Name,autoID
select * from #Tmp where autoID in(select autoID from
#tmp2)
最后一个select即得到了Name,Address不重复的结果集
更改数据库中表的所属用户的两个方法
大家可能会经常碰到一个数据库备份还原到另外一台机器结果导致所有的表都不能打开了,原因是建表的时候采用了当时的数据库用户……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select s.部门名,s.领用人,s.仪器名称,s.型号,s.单价,s.存放地 from s where s.部门号 in(select u.unit from users as u where u.user_id='01')
追问
我原来也是这么写的,可是查不出结果!这种写法部门号要即满足0102又满足0202,也就是where 部门号=‘0102’ and 部门号=‘0202’
可是我要的是 where 部门号=‘0102’ or 部门号=‘0202’
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询