假设一新闻系统,有二表
表一:新闻表news(newsid)
表二:类别表class(classid)
表三:新闻类别关联表newsclass(newsid,classid)
一条新闻可同属多个分类。示例数据如下:
newsid classid
1 1
1 2
1 3
2 2
2 3
3 4要查询classid等于2跟3的新闻id,得到如下记录集
newsid
1
2 sql语句怎么写?上面是简单例子,实际应用要求给出任意多个新闻分类组合,查询出相应的新闻id列表?
表一:新闻表news(newsid)
表二:类别表class(classid)
表三:新闻类别关联表newsclass(newsid,classid)
一条新闻可同属多个分类。示例数据如下:
newsid classid
1 1
1 2
1 3
2 2
2 3
3 4要查询classid等于2跟3的新闻id,得到如下记录集
newsid
1
2 sql语句怎么写?上面是简单例子,实际应用要求给出任意多个新闻分类组合,查询出相应的新闻id列表?
INSERT @t
SELECT 1,1 UNION ALL SELECT
1,2 UNION ALL SELECT
1,3 UNION ALL SELECT
2,2 UNION ALL SELECT
2,3 UNION ALL SELECT
3,4
DECLARE @s VARCHAR(100)
SET @s='2,3'
SELECT * FROM @tSELECT DISTINCT a.NewsID FROM
(SELECT NewsID FROM @t GROUP BY newsID) a
INNER JOIN @t b
ON b.NewsID=a.NewsID AND CHARINDEX(','+RTRIM(b.ClassID)+',',',' + @s + ',')>0
INSERT @t
SELECT 1,1 UNION ALL SELECT
1,2 UNION ALL SELECT
1,3 UNION ALL SELECT
2,2 UNION ALL SELECT
2,3 UNION ALL SELECT
3,4 UNION ALL SELECT
1,5DECLARE @s VARCHAR(100)
SET @s='2,3' --假设你要查的classid为2,3。
SELECT * FROM @tSELECT a.NewsID FROM
(SELECT NewsID FROM @t GROUP BY newsID) a
INNER JOIN @t b
ON b.NewsID=a.NewsID
AND CHARINDEX(','+RTRIM(b.ClassID)+',',',' + @s + ',')>0
GROUP BY a.NewsID HAVING COUNT(b.classid)= (LEN(REPLACE(@s,',',',,'))-LEN(@s)+1)