SQL where子句依赖于prevoius select语句

时间:2016-03-24 20:37:50

标签: mysql

在以下声明中,我试图从数据库中检索推文及其作者信息。我还想检索与这些推文相关的主题标签(换句话说,在那些推文中提到)。

select Tweet.Label, Tweet.TDate, Author.Lable, Author.ALink, Tweet.TLink, Tweet.ID as TID 
from Tweet, Author
where Tweet.ID IN 
(select TweetID from TweetMention where MentionID IN 
(select ID from Mention where Label = 'Cr7Prince4ever')) 
AND Author.ID = Tweet.AuthorID
UNION
select Label, HLink
from Hashtag
where ID IN
(select HashID from TweetHashs where TweetID = TID)

除了如何在Tweet和Hashtag之间建立链接外,一切正常。我想首先检索推文及其作者,并根据检索到的推文检索这些推文中写的主题标签。目前,我无法解决的错误是在where子句where TweetID = TID的第二个select语句中。我试图让第二个语句根据第一个语句中检索到的推文ID获取推文ID,但它不起作用。

1 个答案:

答案 0 :(得分:0)

您的查询存在许多问题,无法使用。

也许您正在寻找这样的查询:

select     Tweet.Label, 
           Tweet.TDate, 
           Author.Lable, 
           Author.ALink, 
           Tweet.TLink, 
           Tweet.ID,
           Hashtag.Label,
           Hashtag.HLink           
from       Tweet
inner join Author 
        on Tweet.AuhtorID = Author.ID
left join  TweetHashs 
        on TweetHashs.TweetID = Tweet.ID
left join  Hashtag 
        on Hashtag.ID = TweetHashs.HashID 
where      Tweet.ID IN 
           (   select TweetID 
               from   TweetMention 
               where  MentionID IN
                      (  select ID 
                         from   Mention 
                         where  Label = 'Cr7Prince4ever'
                       )
            )

注意: TweetHashs 的拼写似乎不对,但这就是你说的。

上述查询将返回同一条推文的多个结果,因为它会在单独的行中列出推文的每个哈希值。如果您希望每条推文只有一个结果,并且在一个以逗号分隔的列表中连接其哈希值,则可以将group_concatgroup by一起使用:

select     Tweet.Label, 
           Tweet.TDate, 
           Author.Lable, 
           Author.ALink, 
           Tweet.TLink, 
           Tweet.ID,
           group_concat(Hashtag.Label) labels,
           group_concat(Hashtag.HLink) links           
from       Tweet
inner join Author 
        on Tweet.AuhtorID = Author.ID
left join  TweetHashs 
        on TweetHashs.TweetID = Tweet.ID
left join  Hashtag 
        on Hashtag.ID = TweetHashs.HashID 
where      Tweet.ID IN 
           (   select TweetID 
               from   TweetMention 
               where  MentionID IN
                      (  select ID 
                         from   Mention 
                         where  Label = 'Cr7Prince4ever'
                       )
            )
group by   Tweet.ID