EXISTS的使用

zzh20 2003-10-10 09:19:43
//////////////////////////////////////////////////////////////////
use database
SELECT *
FROM info a
WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND bsort IN
(SELECT TOP 3 *
FROM bizinfo
WHERE bsort =a.bsort
ORDER BY id DESC)
order by id desc
/////////////////////////////////////////////////////////////////
执行后错误信息:
服务器: 消息 116,级别 16,状态 1,行 2
当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。

-----------------------------------------------------------------
请问该如何改呀,谢谢了!
...全文
49 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
伍子V5 2003-10-10
  • 打赏
  • 举报
回复
use database
GO
SELECT *
FROM info a
WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND id IN
(SELECT TOP 3 id
FROM info
where bsort=a.bsort
ORDER BY id DESC)
order by id desc
zzh20 2003-10-10
  • 打赏
  • 举报
回复
搞定! 感谢!
伍子V5 2003-10-10
  • 打赏
  • 举报
回复
use database
GO
SELECT *
FROM info a
WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND id IN
(SELECT TOP 3 id
FROM info
where bsort=a.bsort
ORDER BY id DESC)
order by id desc
zzh20 2003-10-10
  • 打赏
  • 举报
回复
我这样试过,不过主要还是 order by id desc 的问题
用union只能在最后加上order by id desc

用这种办法返回的并不是每个分类最新的3条记录。
伍子V5 2003-10-10
  • 打赏
  • 举报
回复
按照你的意思,可以这么写
use database
go
SELECT top 3 * FROM info WHERE bsort IN ('分类1')
union all
SELECT top 3 * FROM info WHERE bsort IN ('分类2')
union all
SELECT top 3 * FROM info WHERE bsort IN ('分类3')
union all
SELECT top 3 * FROM info WHERE bsort IN ('分类4')
zzh20 2003-10-10
  • 打赏
  • 举报
回复
是呀,上面的我写错了呀,发的时候改了一个表名,第二个没改,不好意思了。

问题是语句执行返回所有记录呀
"AND bsort IN
(SELECT TOP 3 bsort
FROM bizinfo
where id=a.id
ORDER BY id DESC) "
这些语句好像没执行呀,如何改呀,真是头痛的事.麻烦再看看呢 感谢!
伍子V5 2003-10-10
  • 打赏
  • 举报
回复
你看看你的语句
明明两个表嘛
zzh20 2003-10-10
  • 打赏
  • 举报
回复
因为我在做测试,我每个分类都写入了>= 3条记录,要求是取出这四个分类3条记录,应该返回3*4条记录呀
zzh20 2003-10-10
  • 打赏
  • 举报
回复
只是一个表,info
伍子V5 2003-10-10
  • 打赏
  • 举报
回复
结果可不一定就是3*4哟
那要看你的数据是怎么样的了
伍子V5 2003-10-10
  • 打赏
  • 举报
回复
你应该把两个表info,bizinfo都列出来
zzh20 2003-10-10
  • 打赏
  • 举报
回复
几种方法的返回记录不一样,不过都比3*4多.
zzh20 2003-10-10
  • 打赏
  • 举报
回复
列 名 数据类型
id int 自动编号
bsort char 分类
.
.
.

伍子V5 2003-10-10
  • 打赏
  • 举报
回复
如果还有错的话,列出你的表结构来先
伍子V5 2003-10-10
  • 打赏
  • 举报
回复
或者是
use database
SELECT *
FROM info a
WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND bsort IN
(SELECT TOP 3 bsort
FROM bizinfo
where id=a.id
ORDER BY id DESC)
order by id desc
zzh20 2003-10-10
  • 打赏
  • 举报
回复
use database
SELECT *
FROM info a
WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND bsort IN
(SELECT TOP 3 bsort
FROM info
ORDER BY id DESC)
order by id desc

还是返回所有记录呀
伍子V5 2003-10-10
  • 打赏
  • 举报
回复
use database
SELECT *
FROM info a
WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND bsort IN
(SELECT TOP 3 bsort
FROM bizinfo
ORDER BY id DESC)
order by id desc
zzh20 2003-10-10
  • 打赏
  • 举报
回复
我上面写错了,是在同一个表里查询的 bizinfo应写成info
zzh20 2003-10-10
  • 打赏
  • 举报
回复
谢谢 txlicenhe(马可)的回复!
按上面改了后,返回所有的记录,而不是每个分类取3条记录,麻烦再看下哪有问题
welyngj 2003-10-10
  • 打赏
  • 举报
回复
use database
SELECT *
FROM info a
WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND bsort IN
(SELECT TOP 3 bsort
FROM bizinfo
WHERE bsort =a.bsort
ORDER BY id DESC)
order by id desc
加载更多回复(2)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧