关联4张表的SQL查询难题,还要尽可能考虑到性能
数据库表结构如图,一个文章可以有N个标签,标签和标签之间是树形结构。
问:查询出所有tag.name='互联网' and tag.parentid='互联网'.Id 的 article.title和users.name
不知道这个伪代码有没有表述清楚,就是说不只要查询出标签名称是‘互联网’的所有文章标题和用户名,还要符合‘互联网’的下一级所有标签,比如‘移动互联网’等等。
请教大家这条SQL语句该怎么写,数据库是SQL server。 谢谢!
哔哔————
11 years, 5 months ago
Answers
SELECT Title FROM Article WHERE Id IN (SELECT ArticleID FROM Article_Tag WHERE TagID IN (SELECT Id FROM Tag WHERE ParentId IN (SELECT Id FROM Tag WHERE Name = '互联网')) OR TagID IN (SELECT Id FROM Tag WHERE Name = '互联网') GROUP BY ArticleID)
对SQL Server不是很熟悉,自己优化成存储过程吧。不过这个效率太差了,建议变成缓存再查询。
leiwind
answered 11 years, 5 months ago