2011-09-09 20 views
0

私の心の中で単純にするべきクエリを作成するのに問題があります。SQL Server - 2つのテーブルから情報を取得する

私は2つのテーブル(tblReviewstblRating)を持っています。これらのテーブルはいずれもvenueIduserIdです。

同じvenueIduserIdを使用してレビューと評価を返す1つのクエリを作成したいとします。これは可能ですか、2つのクエリを使用する必要がありますか?事前に

おかげ

答えて

0

あなたは

  1. は、これらのフィールドを使用して、両方のテーブルに参加することができます。
  2. ..or UNION(第一選択)(第2の選択)
+0

私はこれらの方法を試しました。 2つのデータ型が同じでないため、組合は機能しませんでした(私は思う)。すべてのテーブルにデータが存在するとは限らないため、結合は機能しませんでした。 – twsJames

+0

次に、クロス結合を使用します。 – Gedrox

0
SELECT * 
FROM tblReviews AS rev INNER JOIN 
    tblRating AS rat ON rev.venueid = rat.venueid AND rev.userid = rat.userid 

この問合せは、各テーブルからの一致する行を返します。 1番目、2番目、または両方のテーブルのすべてのレコードを必要とする場合は、外部結合(LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN)を使用できます。

5
SELECT Rev.column_name, Rat.column_name 
    FROM dbo.tblReview AS Rev 
    FULL OUTER JOIN dbo.tblRating AS Rat 
    ON Rev.VenueId = Rat.VenueId 
    AND Rev.UserId = Rat.UserId; 

あなたは、特定のユーザーのために、すべての場合:

SELECT Rev.column_name, Rat.column_name 
    FROM dbo.tblReview AS Rev 
    FULL OUTER JOIN dbo.tblRating AS Rat 
    ON Rev.VenueId = Rat.VenueId 
    AND Rev.UserId = Rat.UserId 
    WHERE (Rev.UserId = @UserId OR Rat.UserId = @UserId); 

あなたがしたい場合は、特定の会場のためのすべて:

SELECT Rev.column_name, Rat.column_name 
    FROM dbo.tblReview AS Rev 
    FULL OUTER JOIN dbo.tblRating AS Rat 
    ON Rev.VenueId = Rat.VenueId 
    AND Rev.UserId = Rat.UserId 
    WHERE (Rev.VenueId = @VenueId OR Rat.VenueId = @VenueId); 
+0

また、どちらのテーブルにvenueid/useridの組み合わせのレコードが複数ある場合はどうなりますか? – JohnFx

+0

この単純なケースでは、2つの行が得られます。一方の側は両方の行に同じデータを持ちます。 –

+0

各テーブルにレコードが1つしかないので、両方のテーブルに結果がある場合でも結果を取得したい場合、テーブルに結果がない場合やテーブルの1つに結果がある場合 – twsJames

0

私はあなたがこれを求めているかどうかを知りません。
試してみてください:

SELECT re.venueId, re.userId, re.review, ra.rating 
FROM tblReviews re INNER JOIN tblRating ra 
ON re.venueId = ra.venueId AND re.userId = ra.userId 
関連する問題