让我以我的方式解释问题
交易表
TransactionId,SellerId,BuyerId,ProductId,TransactionPrice,Status
RatingTable
RatingId,TransactionId,SellerId,BuyerId,ProductId,IsFromBuyer(bit),Rate1,Rate2,Rate3
现在在我的应用程序中,将有两个进入评级表。这将是每笔交易。 买方可以对卖方进行评级,卖方也可以给买方评分!
现在的问题是如何确定这样的买家/卖家已经给出了评级。
问题是我想要的视图,它会向我提供该交易的数据+ ratedBy(卖方/买方)
任何人都可以给我一些想法吗?
看!我可以简单地解决一些问题,但问题是我不确定评级表是否必须有记录!它可能有记录。
让我给你更多解释:
我有两个观点1)交易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)