1

私は3つのテーブルを持っています:

tbl_customers
tbl_users
tbl_reviews

私は、顧客がユーザーのレビューを送信するアプリケーションを持っています。私ができるようにしたいのは、同じ顧客から同じユーザーの複数のレビューがないことです. これが私がやりたいことです。

SELECT
  *
FROM
  tbl_customers
WHERE
  tbl_customer.CustomerID != tbl_review.CustomerID
  AND tbl_user.UserID != tbl_reviews.UserID
  • CustomerID は tbl_customer の p_id です
  • UserID は tbl_users の p_id です。
  • tbl_review での両者の外部キー関係。

前もって感謝します。

さらに情報が必要な場合は、お知らせください。

4

4 に答える 4

4

両方の列を使用するtbl_reviewsテーブルに一意の制約を設定します。これにより、複数のエントリが完全に禁止され、単純な結合を実行できるようになります。ユーザーが同じ人物に対して複数のレビューを入力しようとしたときにエラーが発生しないように、エントリが追加されたときの検証を追加する必要があります。

alter table tbl_reviews add unique index(reviewid, userid);

select *
from tbl_users as u
join tbl_reviews as r on r.userid = u.userid
于 2012-04-13T18:33:38.730 に答える
1

tbl_customerに同じtbl_userの複数のレビューを持たせたくない場合は、CustomerIDとUserIDに基づいてtbl_reviewの一意のインデックスを作成できます。これにより、同じリンクで2つのレビューを作成する方法がなくなります。

それに加えて、投稿する前にレビューがすでに存在するかどうかを確認するために簡単なカウントを行うことができます: SELECT COUNT(*) FROM tbl_reviews WHERE CustomerID = @CustomerID AND UserID = @UserID

データベースに複数のレビューを入れたいが、各顧客から1つだけを選択したい場合は、顧客IDでグループ化し、最初/最後のレビューを選択するだけです。

于 2012-04-13T18:34:20.867 に答える
1

一意制約の考え方に同意します。SQL Server(およびおそらく他のデータベース)で、INSERTの代わりにMERGEステートメントを使用できることを追加したいと思います。既存のレコードを更新するか、新しいレコードを挿入します。ただし、レビューが存在するかどうか、更新するかどうかを尋ねられるかどうかを確認するだけでよい場合があります。これは、レビュー対象のユーザーを指定するだけでなく、すべてを書き直すのではなく、既存のレビューを呼び出して変更できるようにする前に行ってください。

于 2012-04-13T19:14:07.617 に答える
-1
SELECT * FROM
tbl_users tu
 INNER JOIN 
tbl_reviews tr
ON tu.UserID=tr.UserID; 
于 2012-04-13T18:29:38.080 に答える