数据库中的混淆与评级和翻译

时间:2012-04-27 05:09:09

标签: sql database

让我以我的方式解释问题

交易表

TransactionId,SellerId,BuyerId,ProductId,TransactionPrice,Status

RatingTable

RatingId,TransactionId,SellerId,BuyerId,ProductId,IsFromBuyer(bit),Rate1,Rate2,Rate3

现在在我的应用程序中,将有两个进入评级表。这将是每笔交易。 买方可以对卖方进行评级,卖方也可以给买方评分!

现在的问题是如何确定这样的买家/卖家已经给出了评级。

问题是我想要的视图,它会向我提供该交易的数据+ ratedBy(卖方/买方)

任何人都可以给我一些想法吗?

看!我可以简单地解决一些问题,但问题是我不确定评级表是否必须有记录!它可能有记录。

让我给你更多解释:

我有两个观点1)交易2)评级

我想在交易页面上显示“查看”数据(我在上面指定),以便显示/隐藏评级按钮。

2 个答案:

答案 0 :(得分:1)

这取决于您使用的数据库供应商,但您只想在RatingTable上加入两次并根据您的IsFromBuyer列过滤联接。

在oracle中可能看起来像这样:

create or update view TransactionView AS
    select TransactionTable.*, 
           BuyerRating.Rate1 BuyerRate1, BuyerRating.Rate2 BuyerRate2, BuyerRating.Rate3 BuyerRate3, 
           SellerRating.Rate1 SellerRate1, SellerRating.Rate2 SellerRate2, SellerRating.Rate3 SellerRate3
        from TransactionTable 
     left join RatingTable BuyerRating 
          on TransactionTable.TransactionId = BuyerRating.TransactionId
             AND BuyerRating.IsFromBuyer = true
     left join RatingTable SellerRating 
          on TransactionTable.TransactionId = SellerRating.TransactionId
             AND SellerRating.IsFromBuyer = false

如果没有BuyerRating行,那么您将在BuyerRate1 / 2/3字段中具有NULL值,因为它是LEFT JOIN,其中包括所有TransactionTable行,即使在RatingTable中没有要加入的匹配的BuyerRating行也是如此。 (同样,对于缺少的SellerRating行)

答案 1 :(得分:0)

如果您有RatingID,并且想要获得交易的两个条目:

SELECT * FROM TransactionTable x
INNER JOIN RatingTable y
ON x.TransactionID = y.TransactionID
WHERE TransactionID in (SELECT TransactionID from RatingTable where RatingID = 1234)