0

私のやり方で質問を説明させてください

取引表

TransactionId、SellerId、BuyerId、ProductId、TransactionPrice、Status

評価表

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

今私のアプリケーションでは、評価テーブルに 2 つのエントリがあります。お取引ごとになります。買い手は売り手を評価することができ、売り手は買い手を評価することができます!

ここでの問題は、そのような買い手/売り手がすでに評価を与えていることをどのように確認できるかです。

問題は、そのトランザクションのデータ + ratingBy(seller/buyer) を提供するビューが欲しいということです

誰でも私にアイデアを教えてもらえますか?

見て!単純にいくつかのクエリを起動することはできますが、評価テーブルにレコードが必要かどうかはわかりません! 記録があるかもしれません。

もっと説明しましょう:

私は2つのビューを持っています1)トランザクション2)評価

評価ボタンを表示/非表示にできるように、取引ページにその「表示」データ (上記で指定したもの) が必要です。

4

2 に答える 2

1

使用しているデータベース ベンダーによって異なりますが、RatingTable で 2 回結合し、IsFromBuyer 列に基づいて結合をフィルター処理するだけです。

オラクルでは次のようになります。

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 値が含まれます。これは、RatingTable に結合する一致する BuyerRating 行がない場合でも、すべての TransactionTable 行が含まれる LEFT JOIN であるためです。(欠落している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 に答える