需要帮助将子查询中的列值获取到主查询

时间:2014-11-13 18:56:32

标签: sql sql-server sql-server-2008

我有几张名为“分享”,“播放列表”,“群组”,“内容”的表格。

分享表:

playlistID, expirationDate, groupID 

群组表:

userID ,groupID  

播放列表:

Playlistid, contentUid 

内容表:

contentID, contentUid

在这里,我想获取给定userID的contentID和expirationDate。

使用'userId',我获得了该用户的'groupID'列表,并使用“sharing”表中的'groupID'进行了检查。如果“共享”表有'groupID',我拿了那些'playlistID'并使用'playlisID'我拿了'contentID'但是我想得到“共享”表中的contentID的'expirationDate' / p>

下面的查询返回contentID,而不是它所属的播放列表的expirationDate,因为我使用'IN'

使用了子查询

使用的查询:

SELECT ContentID 
FROM content
WHERE contentUid IN (SELECT contentuid
                    FROM playlist
                    WHERE playlistuuid IN (SELECT playlistID 
                                           FROM sharing
                                           WHERE groupID IN (SELECT GroupID 
                                                             FROM groups
                                                             WHERE UserID = 605)
                                             AND playlistID IS NOT NULL)

2 个答案:

答案 0 :(得分:0)

为此,子查询可能不是最佳选择。尝试加入你的桌子:

SELECT c.ContentUid, s.expirationDate
FROM content c, playlist p , sharing s, groups g
WHERE c.contentUid = p.contentuid
AND p.playlistid = s.playlistID
AND s.groupID = g.groupID
AND g.userID = 605

现在,您可以从任何表格中的相关记录中访问任何内容。

答案 1 :(得分:0)

SELECT c.ContentUid, s.expirationDate
FROM content c
JOIN playlist p 
ON c.contentUid = p.contentuid
JOIN sharing s
ON p.playlistid = s.playlistID
JOIN groups g
ON s.groupID = g.groupID
WHERE g.userID = @userID