【问题标题】:Is there any way to send a column value from outer query to inner sub query?有没有办法将列值从外部查询发送到内部子查询?
【发布时间】:2012-11-07 05:36:55
【问题描述】:

“讨论”表架构

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' 用于标识它的主题或评论。 'desid' 以 'a' 开头代表主题,评论 'desid' 以 'b' 开头。对于评论,“replyto”是与该评论相关联的主要主题的“目标”。

我喜欢找出根据(upvote+downvote+visits+cmets 数量)添加排列的主要主题列表。以下查询按(upvote+downvote+visits)的顺序给出了热门主题列表

select * 查询中upvote+downvote+views 的数量最多

select * 
from [DB_user1212].[dbo].[discussions] 
where desid like 'a%'
order by (upvote+downvote+visited) desc

对于(cmets+upvote+downvote+views)我试过了

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 从外部查询发送到内部子查询。请告诉我如何解决这个问题。请注意,我只需要查询语言的解决方案。

【问题讨论】:

  • 湿婆!你认为有人会回答你可以接受的问题吗:)

标签: sql-server-2008 select subquery


【解决方案1】:

您需要使用表别名:

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,这里不需要,但在子查询中显式会很有用。

【讨论】:

    【解决方案2】:

    我认为这会起作用:) 请告诉我。

    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)
    

    【讨论】:

    • 感谢 Radu,它确实有效,但在某些情况下并没有给出完美的结果。但感谢您回答..+1 给你..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多