Sql server 使用自定义内部联接进行更新的帮助-T-SQL

Sql server 使用自定义内部联接进行更新的帮助-T-SQL,sql-server,tsql,sql-server-2008,inner-join,Sql Server,Tsql,Sql Server 2008,Inner Join,我为每个位置类型(城市、街道、国家等)提供了一个表格 现在我有了一个存储过程,它需要返回一个“位置”列表,以及它们的“最高级别的评审” 我有一张临时的桌子来保存“位置”(可以是任何东西——街道、城市等等) 我先将城市、街道、国家等数据插入临时表 最后,我得到了一个“位置”临时表,对于其中的每一个位置,我都需要获得最高评级的评论。(最高=基本分数,例如5.0) 基数: 位置Many..Manypost(PostLocations连接表) 发布1..1审查 复习1..1分数 位置临时表: DEC

我为每个位置类型(城市、街道、国家等)提供了一个表格

现在我有了一个存储过程,它需要返回一个“位置”列表,以及它们的“最高级别的评审”

我有一张临时的桌子来保存“位置”(可以是任何东西——街道、城市等等)

我先将城市、街道、国家等数据插入临时表

最后,我得到了一个“位置”临时表,对于其中的每一个位置,我都需要获得最高评级的评论。(最高=基本分数,例如5.0)

基数:

  • 位置Many..Manypost(PostLocations连接表)
  • 发布1..1审查
  • 复习1..1分数
位置临时表:

DECLARE @ResultSet TABLE
(
    [LocationId]                INT,
    [TopReviewId]               INT, -- starts out NULL, need to fill in
    [TopReviewContent]          NVARCHAR(MAX)  -- starts out NULL, need to fill in       
)

-- Get the Top Rated Review for each location.
    UPDATE      ResultSet
    SET         TopReviewId = TopReview.PostId, 
                TopReviewContent = TopReview.Content
    FROM        @ResultSet ResultSet
    INNER JOIN
    (
        SELECT TOP 1 pl.LocationId, p.postid, p.Content
        FROM PostLocations pl
        INNER JOIN Posts p
        ON pl.PostId = p.PostId
        INNER JOIN Reviews r
        ON p.PostId = r.PostId
        INNER JOIN Scores s
        ON r.ScoreId = s.ScoreId
        INNER JOIN @ResultSet rs
        ON pl.LocationId = rs.LocationId
        ORDER BY s.BaseScore DESC
    ) AS TopReview
    ON  ResultSet.LocationId = TopReview.LocationId

    INNER JOIN  PostLocations pl
    ON          ResultSet.LocationId = pl.LocationId
    INNER JOIN  Posts p
    ON          pl.PostId = p.PostId
    INNER JOIN  Reviews r
    ON          pl.PostId = r.PostId


    -- Now return the Results:
    SELECT      TOP 10
                [LocationId],
                [TopReviewId],             
                [TopReviewContent]        

    FROM        @ResultSet
这是我当前得到的输出

LocationId    TopReviewId   TopReviewContent
1             12313         Blah Blah
2             NULL          NULL
3             NULL          NULL
这是我想要的输出

LocationId    TopReviewId   TopReviewContent
1             12313         Blah Blah
2             44323         Meh meh
3             5345345       Pew pew

也许这很幼稚,但您是否尝试过:

select c.name, max(price)
from 
    customer c inner join
    product p on p.customerid = c.customerid
group by c.name
如果你想得到最好的评论,你可以这样做:

SELECT TOP 1 pl.LocationId, p.postid, p.Content
FROM PostLocations pl  
    INNER JOIN Posts p  
        ON pl.PostId = p.PostId  
    INNER JOIN Reviews r  
        ON p.PostId = r.PostId  
    INNER JOIN Scores s  
        ON r.ScoreId = s.ScoreId  
ORDER BY s.BaseScore DESC  
SELECT pl.LocationId, p.postid, p.Content, max(s.BaseScore)
FROM PostLocations pl  
    INNER JOIN Posts p    
    ON pl.PostId = p.PostId  
    INNER JOIN Reviews r  
    ON p.PostId = r.PostId  
    INNER JOIN Scores s  
    ON r.ScoreId = s.ScoreId  
group by p1.locationid, p.postid, p.content  
如果您希望每个位置都有最好的评论,您可以这样做:

SELECT TOP 1 pl.LocationId, p.postid, p.Content
FROM PostLocations pl  
    INNER JOIN Posts p  
        ON pl.PostId = p.PostId  
    INNER JOIN Reviews r  
        ON p.PostId = r.PostId  
    INNER JOIN Scores s  
        ON r.ScoreId = s.ScoreId  
ORDER BY s.BaseScore DESC  
SELECT pl.LocationId, p.postid, p.Content, max(s.BaseScore)
FROM PostLocations pl  
    INNER JOIN Posts p    
    ON pl.PostId = p.PostId  
    INNER JOIN Reviews r  
    ON p.PostId = r.PostId  
    INNER JOIN Scores s  
    ON r.ScoreId = s.ScoreId  
group by p1.locationid, p.postid, p.content  

也许这很幼稚,但您是否尝试过:

select c.name, max(price)
from 
    customer c inner join
    product p on p.customerid = c.customerid
group by c.name
如果你想得到最好的评论,你可以这样做:

SELECT TOP 1 pl.LocationId, p.postid, p.Content
FROM PostLocations pl  
    INNER JOIN Posts p  
        ON pl.PostId = p.PostId  
    INNER JOIN Reviews r  
        ON p.PostId = r.PostId  
    INNER JOIN Scores s  
        ON r.ScoreId = s.ScoreId  
ORDER BY s.BaseScore DESC  
SELECT pl.LocationId, p.postid, p.Content, max(s.BaseScore)
FROM PostLocations pl  
    INNER JOIN Posts p    
    ON pl.PostId = p.PostId  
    INNER JOIN Reviews r  
    ON p.PostId = r.PostId  
    INNER JOIN Scores s  
    ON r.ScoreId = s.ScoreId  
group by p1.locationid, p.postid, p.content  
如果您希望每个位置都有最好的评论,您可以这样做:

SELECT TOP 1 pl.LocationId, p.postid, p.Content
FROM PostLocations pl  
    INNER JOIN Posts p  
        ON pl.PostId = p.PostId  
    INNER JOIN Reviews r  
        ON p.PostId = r.PostId  
    INNER JOIN Scores s  
        ON r.ScoreId = s.ScoreId  
ORDER BY s.BaseScore DESC  
SELECT pl.LocationId, p.postid, p.Content, max(s.BaseScore)
FROM PostLocations pl  
    INNER JOIN Posts p    
    ON pl.PostId = p.PostId  
    INNER JOIN Reviews r  
    ON p.PostId = r.PostId  
    INNER JOIN Scores s  
    ON r.ScoreId = s.ScoreId  
group by p1.locationid, p.postid, p.content  

我有点不明白你想做什么。但是要获得客户名单以及他们的最高订单ID,您就不能这样做吗

select customers.name, orders.orderid 
from customers join orders on customers.customerid = orders.customerid 
group by customers.customerid 
having max(orders.price);

我有点不明白你想做什么。但是要获得客户名单以及他们的最高订单ID,您就不能这样做吗

select customers.name, orders.orderid 
from customers join orders on customers.customerid = orders.customerid 
group by customers.customerid 
having max(orders.price);

任务是否需要插入到临时表中?我想你可以在没有临时表的情况下找到每个客户的最高价格。更新声明让人分心——你的预期产出是什么?也许我不应该使用虚构的表/场景。我会更新Q.@Ramy,@OMG Ponies-现在大家看看-再一次,为混乱感到抱歉。所以,让我看看我是否有这个,你只是想要顶部的评论。不是每个位置的顶部审阅?您的任务是否需要插入到临时表中?我想你可以在没有临时表的情况下找到每个客户的最高价格。更新声明让人分心——你的预期产出是什么?也许我不应该使用虚构的表/场景。我会更新Q.@Ramy,@OMG Ponies-现在大家看看-再一次,为混乱感到抱歉。所以,让我看看我是否有这个,你只是想要顶部的评论。不是每个位置的顶级评论?