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最大的一行啊?