快,又一难题,看谁的效率高!

weinaxxc 2008-08-01 05:29:47
表tmp

ID title p2ID p2name

102 良安 109 大礼堂
102 良安 110 良友厅
102 良安 111 良安厅
72 君澜 38 世贸厅
72 君澜 48 行政厅
72 君澜 49 总统厅
92 威斯汀 52 宝石厅
92 威斯汀 58 玛瑙厅
94 开元 93 天弘天
...
...
------------------------------------------
要求:
只能用语句,这个表是我查询出来的临时表,还要用来拼完整SQL语句的
随机取三个title,同时随机取一个对应的p2name
--------------------------------------------
结果:
ID title p2id p2name
102 良安 110 大礼堂
72 君澜 48 行政厅
92 威斯汀 58 玛瑙厅
也可能是:
92 威斯汀 52 宝石厅
102 良安 110 良友厅
94 开元 93 天弘天





...全文
144 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianhuo_soft 2008-08-02
  • 打赏
  • 举报
回复
酒店桌位安排??

好像有这个算法 我觉得在程序级别这个比较好

我有delphi的代码
ws_hgo 2008-08-02
  • 打赏
  • 举报
回复
哦!
hery2002 2008-08-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiaomeixiang 的回复:]
引用 2 楼 weinaxxc 的回复:
怎么又看不到了,没人?


人在这。。。
[/Quote]
zoujp_xyz 2008-08-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiaomeixiang 的回复:]
SQL code

create table tmp (ID int, title Nvarchar(20), p2ID int, p2name Nvarchar(20))
GO

insert tmp(id,title,p2id,p2name) select 102 ,N'良安', 109 ,N'大礼堂'
union all select 102 ,N'良安', 110 ,N'良友厅'
union all select 102 ,N'良安', 111 ,N'良安厅'
union all select 72 ,N'君澜', 38 ,N'世贸厅'
union all select 72 ,N'君澜', 48 ,N'行政厅'
union all select 72 ,N'君澜', 49…
GO

select top 3 *
from tmp a
where p2id=(select top 1 p2id from tmp where id=a.id order by newid())
order by newid()
GO


[/Quote]
  • 打赏
  • 举报
回复

create table tmp (ID int, title Nvarchar(20), p2ID int, p2name Nvarchar(20))
GO

insert tmp(id,title,p2id,p2name) select 102 ,N'良安', 109 ,N'大礼堂'
union all select 102 ,N'良安', 110 ,N'良友厅'
union all select 102 ,N'良安', 111 ,N'良安厅'
union all select 72 ,N'君澜', 38 ,N'世贸厅'
union all select 72 ,N'君澜', 48 ,N'行政厅'
union all select 72 ,N'君澜', 49 ,N'总统厅'
union all select 92 ,N'威斯汀', 52 ,N'宝石厅'
union all select 92 ,N'威斯汀', 58 ,N'玛瑙厅'
union all select 94 ,N'开元', 93 ,N'天弘天'

GO

select top 3 * from tmp a order by newid()
-狙击手- 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiaomeixiang 的回复:]
引用 2 楼 weinaxxc 的回复:
怎么又看不到了,没人?


人在这。。。
[/Quote]
lgxyz 2008-08-01
  • 打赏
  • 举报
回复
select *
from tb a
where p2id=(select top 1 p2id from tb where id=a.id order by newid())
order by newid()
xiaomeixiang 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 weinaxxc 的回复:]
怎么又看不到了,没人?
[/Quote]

人在这。。。
xiaomeixiang 2008-08-01
  • 打赏
  • 举报
回复


create table tmp (ID int, title Nvarchar(20), p2ID int, p2name Nvarchar(20))
GO

insert tmp(id,title,p2id,p2name) select 102 ,N'良安', 109 ,N'大礼堂'
union all select 102 ,N'良安', 110 ,N'良友厅'
union all select 102 ,N'良安', 111 ,N'良安厅'
union all select 72 ,N'君澜', 38 ,N'世贸厅'
union all select 72 ,N'君澜', 48 ,N'行政厅'
union all select 72 ,N'君澜', 49 ,N'总统厅'
union all select 92 ,N'威斯汀', 52 ,N'宝石厅'
union all select 92 ,N'威斯汀', 58 ,N'玛瑙厅'
union all select 94 ,N'开元', 93 ,N'天弘天'

GO

select top 3 *
from tmp a
where p2id=(select top 1 p2id from tmp where id=a.id order by newid())
order by newid()
GO

drop table tmp

weinaxxc 2008-08-01
  • 打赏
  • 举报
回复
怎么又看不到了,没人?
xiaomeixiang 2008-08-01
  • 打赏
  • 举报
回复

select top 3 *
from tmp a
where p2id=(select top 1 p2id from tmp where id=a.id order by newid())
order by newid()

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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