27,579
社区成员
发帖
与我相关
我的任务
分享
SELECT 标题,
(SELECT 文章分类表.一级分类名 FROM 文章分类表 WHERE 文章分类表.ID=CAST(文章表.一级分类ID AS INT)) AS 一级分类别名
,(SELECT 文章分类表.二级分类名 FROM 文章分类表 WHERE 文章分类表.ID=CAST(文章表.二级分类ID AS INT)) AS 二级分类别名
,(SELECT 文章分类表.三级分类名 FROM 文章分类表 WHERE 文章分类表.ID=CAST(文章表.三级分类ID AS INT)) AS 三级分类别名
FROM 文章表
SELECT 标题,
(SELECT 文章分类表.一级分类名 FROM 文章分类表 WHERE 文章分类表.ID=CAST(文章表.一级分类ID AS INT)) AS 一级分类
,(SELECT 文章分类表.二级分类名 FROM 文章分类表 WHERE 文章分类表.ID=CAST(文章表.二级分类ID AS INT)) AS 一级分类
,(SELECT 文章分类表.三级分类名 FROM 文章分类表 WHERE 文章分类表.ID=CAST(文章表.三级分类ID AS INT)) AS 一级分类
FROM 文章表
SELECT A.标题,B.一级分类,C.二级分类,D.三级分类
FROM 文章表 AS A INNER JOIN
文章分类表 AS CA ON A.一级分类 = CA.ClassID INNER JOIN
文章分类表 AS CB ON A.二级分类 = CB.ClassID INNER JOIN
文章分类表 AS CC ON A.三级分类 = CC.ClassID
我试过这样的语句,只有当文章表的一级分类、二级分类、三级分类字段中都不为null且在文章分类表中都有记录时才能查到
我希望,当文章表的一级分类、二级分类、三级分类,这三个字段中有任何一个字段不为null,且能在文章分类表中找到对应记录时,都能显示出来。
当然,如果文章表的一级分类、二级分类、三级分类,这三个字段中有任何一个字段不为null时,无论能不能在分类表中找到对应记录,都能查到的话最好。如果在分类表中未到表相应记录时,则该字段显示NULL,这样的话,当文章表中的记录为:
ID 标题 一级分类 二级分类 三级分类
49 这是第一篇文章 NULL NULL NULL
50 这是第一篇文章 22 23 24
这样的记录,因为文章分类表中没有ID为22、23、24的记录,如果也能查出来的话最好!
;with 文章分类表(ID,一级分类,二级分类,三级分类,上级分类) as
(
select '01', '新闻', 'NULL', 'NULL', 'NULL' union all
select '02', 'NULL', '国内新闻', 'NULL', '01' union all
select '03', 'NULL', '国际新闻', 'NULL', '01' union all
select '04', 'NULL', '省内新闻', 'NULL', '01' union all
select '05', 'NULL', 'NULL', '娱乐新闻', '04' union all
select '06', 'NULL', 'NULL', '科技动态', '04' union all
select '07', 'NULL', 'NULL', '娱乐新闻', '03' union all
select '08', 'NULL', 'NULL', '科技动态', '03' union all
select '09', '故事', 'NULL', 'NULL', 'NULL' union all
select '10', 'NULL', '本地故事', 'NULL', '09'
),
文章表(ID, 标题,一级分类,二级分类,三级分类) as
(
select '01', '这是第一篇文章', '01', 'NULL', 'NULL' union all
select '02', '这是第二篇文章', '01', '02', 'NULL' union all
select '03', '这是第三篇文章', '01', '03', 'NULL' union all
select '04', '这是第四篇文章', '01', '04', 'NULL' union all
select '05', '这是第五篇文章', '01', '04', '05' union all
select '06', '这是第六篇文章', '01', '04', '05' union all
select '07', '这是第七篇文章', '01', '03', '07' union all
select '08', '这是第八篇文章', '09', 'NULL', 'NULL' union all
select '09', '这是第九篇文章', '09', '10', 'NULL'
)
select
标题, isnull(a.一级分类,''), isnull(b.二级分类,''), isnull(c.三级分类,'')
FROM 文章表 as t
left join 文章分类表 as a
on a.id = t.一级分类
left join 文章分类表 as b
on b.id = t.二级分类
left join 文章分类表 as c
on c.id = t.三级分类