Sql server 2008 有没有办法将列值从外部查询发送到内部子查询?
“讨论”表架构Sql server 2008 有没有办法将列值从外部查询发送到内部子查询?,sql-server-2008,select,subquery,Sql Server 2008,Select,Subquery,“讨论”表架构 title description desid replyto upvote downvote views browser used a1 none 1 1 12 - bad topic b2 a1 2 3 14 sql database a3
title description desid replyto upvote downvote views
browser used a1 none 1 1 12
- bad topic b2 a1 2 3 14
sql database a3 none 4 5 34
- crome b4 a3 3 4 12
上表有两种内容类型:主要主题和评论。唯一的内容标识符“desid”,用于标识其为主要主题或评论对于主要主题,“设计”以“a”开头,对于评论,“设计”以“b”开头。对于注释,“replyto”是与此注释关联的主要主题的“desid”
我想找出根据向上投票+向下投票+访问次数+添加评论数排列的最主要主题列表。下面的查询按向上投票+向下投票+访问的顺序给出了最热门的主题列表
按查询选择具有最多向上投票+向下投票+视图数的*
select *
from [DB_user1212].[dbo].[discussions]
where desid like 'a%'
order by (upvote+downvote+visited) desc
对于我尝试过的评论+向上投票+向下投票+观点
select *
from [DB_user1212].[dbo].[discussions]
where desid like 'a%'
order by (select count(*)
from [DB_user1212].[dbo].[discussions]
where replyto = desid )+upvote+downvote+visited) desc
但它不起作用。因为无法将desid从外部查询发送到内部子查询。请告诉我怎么解决这个问题。请注意,我只需要查询语言的解决方案。我认为这会起作用:请告诉我
WITH x AS
(
select count(*) numberofcomments, replyto
from [DB_user1212].[dbo].[discussions]
GROUP BY replyto
)
select [DB_user1212].[dbo].[discussions].*
from [DB_user1212].[dbo].[discussions]
inner JOIN x
ON [DB_user1212].[dbo].[discussions].desid = x.replyto
where desid like 'a%'
ORDER BY (numberofcomments+upvote+downvote+visited)
我想这会管用的:请告诉我
WITH x AS
(
select count(*) numberofcomments, replyto
from [DB_user1212].[dbo].[discussions]
GROUP BY replyto
)
select [DB_user1212].[dbo].[discussions].*
from [DB_user1212].[dbo].[discussions]
inner JOIN x
ON [DB_user1212].[dbo].[discussions].desid = x.replyto
where desid like 'a%'
ORDER BY (numberofcomments+upvote+downvote+visited)
您需要使用表别名:
select *
from [DB_user1212].[dbo].[discussions] d1 --alias
where desid like 'a%'
order by (select count(*)
from [DB_user1212].[dbo].[discussions] d2
where d2.replyto = d1.desid )+upvote+downvote+visited) desc
现在,在子查询中,您可以在这里通过别名d1引用外部表。我还添加了d2,这在这里是不必要的,但在子查询中显式是有用的。您需要使用表别名:
select *
from [DB_user1212].[dbo].[discussions] d1 --alias
where desid like 'a%'
order by (select count(*)
from [DB_user1212].[dbo].[discussions] d2
where d2.replyto = d1.desid )+upvote+downvote+visited) desc
现在,在子查询中,您可以在这里通过别名d1引用外部表。我还添加了d2,这在这里是不必要的,但在子查询中显式是有用的。Shiva!你认为有一个人会回答你的问题,这对你来说是可以接受的:湿婆!你认为有没有人会回答你的问题,这对你来说是可以接受的:谢谢拉杜,它很有效,但在某些情况下,它并没有给出完美的结果。但是谢谢你的回答。谢谢你。拉杜,它很有效,但在某些情况下,它并没有给出完美的结果。但是谢谢你回答..+1给你。。