0

让我以我的方式解释问题

交易表

TransactionId、SellerId、BuyerId、ProductId、TransactionPrice、状态

评分表

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

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

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

问题是我想要一个视图,它将给我该交易的数据 + ratingBy(seller/buyer)

谁能给我个主意?

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

让我给你更多的解释:

我有两个视图 1) 交易 2) 评级

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

4

2 回答 2

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 行也是如此)

于 2012-04-27T05:14:26.547 回答
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)
于 2012-04-27T05:17:07.677 回答