我有一个包含以下ID的大约2百万条记录的巨大列表。
ID, Cat1, Cat2, Cat3, Cat4, Cat5, Name
所有猫场都依赖。因此,Cat1是第一个父级,Cat2依赖于Cat1,而Cat3依赖于Cat2,依此类推。
通过这种方式,您可以想象一个类似于树结构的资源管理器,您可以在其中拥有所有Cat1值,具体取决于您选择的Cat1等Cat2等。
我的计划是构建一个简单的JSON对象,它代表所有200万条记录中的完整结构。
我知道,最简单的方法是做一个简单的SELECT * FROM LIST
,然后将每个类别放入结果对象中,只要它不存在即可。但这需要很长时间,因为我需要通过所有200万条记录。
构建该结构的最快方法是什么?
我的第二种方法是只进行SELECT DISTINCT Cat1 ...
以获取Cat1的所有值,然后为每个Cat1执行SELECT DISTINCT Cat2 ... WHERE Cat1 = X
,然后再为每个Cat2执行一次(对于每个Cat1)等。< / p>
但是这会在我需要发送给SQL Server的很多SQL查询中结束。
是否还有其他方法(较少的SQL查询)来构建代表所有200万条记录中所有类别的完整结构?
我的目标是获得良好的表现(理想情况下在几秒钟内获得最终结构)。
我将使用C#2013(.NET)构建连接到SQL Server的工具。
答案 0 :(得分:0)
如果我理解正确,这应该链接所有匹配的ID:
select distinct
t.id
, t.Cat1
, t2.Cat2
, t3.Cat3
, t4.Cat4
, t5.Cat5
, t.Name
from Table t
inner join table t2
on t.Cat1 = t2.Cat2
inner join table t3
on t2.Cat2 = t3.Cat3
inner join table t4
on t3.Cat3 = t4.Cat4
inner join table t5
on t4.Cat4 = t5.Cat5
答案 1 :(得分:0)
也许这就是你要找的东西:
select distinct
t.Id
, t2.cat1
, t3.cat2
, t4.cat3
, t5.cat4
, t6.cat5
, Name
from Table t
left join (select distinct cat1 from Table t2) t2
on t2.Id = t.Id
left join (select distinct cat2 from Table t3) t3
on t3.Id = t.Id
left join (select distinct cat3 from Table t4) t4
on t4.Id = t.Id
left join (select distinct cat4 from Table t5) t5
on t5.Id = t.Id
left join (select distinct cat5 from Table t6) t6
on t6.Id = t.Id
或许这个:
select distinct
Id
, name
, cat1
from Table t
union all
select distinct
cat2
from Table t
union all
select distinct
cat3
from Table t
union all
select distinct
cat4
from Table t
union all
select distinct
cat5
from Table t