SELECT Guid
FROM Pub_Video
WHERE EXISTS
(SELECT Guid
FROM Pub_Marking
WHERE (MKGuid = Pub_Video.Guid)
GROUP BY Guid
HAVING (COUNT(Guid) = 1))以上SQL是查询出
找出在标示表中存在1条记录的视频记录?
但是现在我想找出在标示表中存在0条的记录的话
我把(COUNT(Guid) = 1)改为(COUNT(Guid) = 0)
是不行的,但我又不想用Not Exists主查询
要怎么办呢?
也就是相当于,整条SQL只有查询的记录数的值是可变的,其他不可变
然后要实现查询:
找出在标示表中存在"0|1|2|3”条记录的视频记录?谢谢
FROM Pub_Video
WHERE EXISTS
(SELECT Guid
FROM Pub_Marking
WHERE (MKGuid = Pub_Video.Guid)
GROUP BY Guid
HAVING (COUNT(Guid) < 1))
0可以改成<1
1可以改成=1或者甚至使用小于2这种逻辑,当然还有其他写法,不过你又不希望用。所以该这里比较合适,另外可以使用having count(xxx) between and 来查询范围
是不行的,因为好像是Exists就是必须为存在了,所以=0的也是没意义RE:说实在的,我感觉用Not Exists就行了后面改下用HAVING (COUNT(Guid)>0))
是的用Not exists是可以,但是这样我得传几个变量进去
我只想写一条SQL,再传一个数字进去就行了
那这条SQL不用Exists的话又要怎么来写呢?谢谢
FROM Pub_Video a INNER JOIN (SELECT MKGUID,COUNT(GUID) [COUNT] FROM Pub_Marking GROUP BY MKGUID) b ON a.[GUID]=b.MKGUID
WHERE b.[COUNT]=0试试
但不好意思,我这里是添加Where的子项所以只能用
select guid from pub_video where (????这里)
谢谢
不用再Join其他表
他和过滤条件要写在Where里面
谢谢
SET @cnt = 0 --亦可传1,2,3,4......SELECT a.[guid]
from Pub_Video a
LEFT JOIN Pub_Marking b
ON a.[guid] = b.[guid]
GROUP BY a.[guid]
HAVING (b.[guid]) = @cnt
select a.guid
from Pub_Video a
left join Pub_Marking b on a.guid=b.MKGuid
group by a.guid
having COUNT(b.guid) in (0,3)