2011-09-09 189 views
0

我在创建查询时遇到了麻烦,这在我的脑海中应该很简单。SQL Server - 从两个表获取信息

我有两个表(tblReviewstblRating)。这两个表格都有venueIduserId

我想创建一个查询,将使用相同的venueIduserId返回审阅和评级。这是可能的,或者我应该使用两个查询?

在此先感谢

回答

0

可以

  1. 加入使用这些字段两个表;
  2. ..或者(选择第一)UNION(SELECT第二)
+0

我试过这两种方法。工会没有工作(我认为),因为这两种数据类型不一样。由于每个表格中并不总是数据,所以连接不起作用。 – twsJames

+0

然后使用交叉连接。 – Gedrox

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

该查询返回从每个表中的匹配的行。如果您想要第一个,第二个或两个表中的所有记录,则可以使用外部联接(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

另外,如果某个场景/用户组合中的任何一张表中有多个记录,该怎么办? – JohnFx

+0

对,在这种简单的情况下,你会得到两行 - 一方将在两行中具有相同的数据。 –

+0

每个表中只会有一条记录,无论这两个表是否有结果,我都希望得到结果,这两个表都没有结果,或者只有一个表有结果 – twsJames

0

我不知道你问这个。
Try:

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 
相关问题