sqlinnotinand
楼上的不排除投机取巧(褒义)呵呵、
如果user真的有存在的房号,人不在房间的问题,不与username比较是不是也显示不出来了呢。呵呵!
select roomid,'房间号不存在'
from [user]
where roomid not in (select distinct roomid from room )
union all
select roomid,'此人不在此房间中'
from [user]
where username not in (select a.username from room a,[user] b where a.roomid = b.roomid and a.username = b.username)
and roomid not in (select roomid
from [user]
where roomid not in (select distinct roomid from room ))
这个就OK了。
下面操作必须执行,要筛选人和房间的匹配哦,虽然办法垃圾,只是在外层查询筛选不存在的房间,不过也是一种办法哦。呵呵!~
第二问题我不是很明白你的意思。代替值为空可以用ISNULL。
2. sql in 和 not in 怎么有那么大的区别
因为有空数据的存在,空数据是不包含在 in 与 not in 之间的.
3. sql 语句 not in 问题 在线等
select
distinct
ss.singerpic
from
songlist
s
join
singerlist
ss
on
s.singerid
=ss.singerid
where
s.rtsp=1
not
in
(select
dic
from
a)
朋友,sql语法不是那样的。
4. sql in和not in集合运算只能用于一个字段吗
可以啊,各个字段分别用这个关键字作为判断条件。比如
select * from tabname
where f1 in ('A', 'B', 'C')
and f2 not in ('MM', 'QQ');
5. sql not in 修改
第一种方式是使用 差集EXCEPT.(这个未测试,可能会有些问题)
select top (2*4) MessageInfo,(select UserName from UserInfo where UserId=FromId) as FromUser,(select UserName from UserInfo where UserId=ToId) as ToUser,Date from Message where IsOpen=1 order by Date desc
EXCEPT --可以使用ALL.这样就不会消除重复行了
select top (2*4-4) MessageInfo,(select UserName from UserInfo where UserId=FromId) as FromUser,(select UserName from UserInfo where UserId=ToId) as ToUser,Date from Message where IsOpen=1 order by Date desc
第二种方式,使用NOT IN:
select top (2*4) MessageInfo,(select UserName from UserInfo where UserId=FromId) as FromUser,(select UserName from UserInfo where UserId=ToId) as ToUser,Date from Message where IsOpen=1
and 你的主键ID或者你选择的某一列 NOT IN (select top (2*4-4)
你的主键ID或者你选择的某一列
from Message where IsOpen=1 order by Date desc)
order by Date desc
那第三种的话,可以使用NTILE排序函数.我大概写一下,等下可以详聊:
select * from (
select top (2*4) MessageInfo,(select UserName from UserInfo where UserId=FromId) as FromUser,(select UserName from UserInfo where UserId=ToId) as ToUser,Date
, ntile(2) over(order by Date) as nt
from Message where IsOpen=1 order by Date desc
)where nt=2
呵呵,先就这些吧,没怎么测试,希望能帮到你~
6. sql语句中的not in 语句
SELECT * FROM TABEL1 WHERE FILEDI NOT IN ( SELECT FILED1 FROM TABLE2) AND FILED2 NOT IN (SELECT FILED2 FROM TABLE3)
直接AND就可以了
7. sql 语句中in ,not in
如果系统不自动优化,并且IN的结果很多,那么有可能IN和NOT IN的效率低些。
所有的IN都可以转换为EXISTS,同样NOT IN可以转换为NOT EXISTS,下面说明IN转换为EXISTS的方法,NOT的类似:
IN的语句:
SELECT * FROM A WHERE F IN (SELECT F FROM B)
可以转换为如下的EXISTS语句:
SELECT * FROM A WHERE EXISTS
(SELECT * FROM B WHERE A.F=B.F)
上面转换的说明:两个WHETE都可能有更多都条件,那么直接AND在相应的地方即可。另外表A和B的关联字段可能名字表同,也司没关系的。
8. SQL中not in的等价操作符是什么啊
not in 等价于 字段 <>选项1 and 字段 <>选项2 and 字段 <> 选项3 and ……
in 等价于 字段 =选项1 or 字段=选项2 or 字段 = 选项3 or ……
9. sql里边,用in、not in 的时候,范围是给定的,那么还需要转化成exists吗
当然不会了,使用EXISTS或者NOT EXISTS只是为了表面IN和NOT IN里面的全表检索,因为IN里面首先要执行完里面的查询内容,而EXISTS是遇到符合的就会停止检索,所以说EXISTS的效率要高于IN,而如果里面的内容是固定的,那么本身里面就没有了全表检索的语句,这样本身效率就要快很多了,而完全没有必要使用EXISTS,而且即使你想使用,这个语法也无从写起了。
10. sql not in问题
NOT IN速度当然很慢,因为这样会存在两个全表检索的情况,使用NOT EXISTS会快很多。
delete from t_b where exists (select 1 from t_b a where isnull(a.cost,0) > isnull(t_b.cost,0) and a.cost <> t_b.cost)
DELETE FROM CIDZ WHERE EXISTS (SELECT 1 FROM CIDZ A WHERE A.ID > CIDZ.ID)
---------这个删除之后,会只剩下这个表中ID最大的一行,没有别的连接条件了么?如果这么已删除,表中只剩下一行了,我觉得你的意思是不是只留下每个地址分组后ID最大的一行啊?