SQL:没有父键的树结构
注意:无法更改数据架构。我受够了 数据库:SQLite 我有一个简单的树结构,没有父键,只有1层深。为了清晰起见,我简化了数据:SQL:没有父键的树结构,sql,sqlite,tree,Sql,Sqlite,Tree,注意:无法更改数据架构。我受够了 数据库:SQLite 我有一个简单的树结构,没有父键,只有1层深。为了清晰起见,我简化了数据: ID Content Title 1 Null Canada 2 25 Toronto 3 33 Vancouver 4 Null USA 5 45 New York 6 56 D
ID Content Title
1 Null Canada
2 25 Toronto
3 33 Vancouver
4 Null USA
5 45 New York
6 56 Dallas
结构也是有序的,因此所有加拿大城市的ID都大于加拿大的ID 1,小于美国的ID 4
问题:当我不知道一个国家有多少个城市时,如何选择所有城市?我的查询将每个城市分配给每个国家,这可能不是您想要的,但是:
我的查询将每个城市分配给每个国家,这可能不是您想要的,但是: 编辑 我刚刚意识到,如果没有更大ID的国家,上述方法就行不通。这应该可以解决它
select * from tbl a
where id > 4
and id < (select coalesce(b.id,a.id+1) from tbl b where b.content is null and b.id > a.id)
编辑2-还使子查询完全相关,因此只需在一个位置更改国家id
编辑
我刚刚意识到,如果没有更大ID的国家,上述方法就行不通。这应该可以解决它
select * from tbl a
where id > 4
and id < (select coalesce(b.id,a.id+1) from tbl b where b.content is null and b.id > a.id)
编辑2 -也使得子查询完全相关,所以只需要在一个地方更改国家ID。
< P>你有几个要考虑的事情,一个是如果你的数据要改变,另一个是如果它不会改变,因为第一个存在2个解决方案,第二个只有一个。 如果您的数据如示例所示进行组织,则可以选择前3项,即 从ID不在的城市中选择*从城市中选择前3个ID 您可以创建另一个表,在其中指定哪个城市属于哪个父级,并自行创建层次结构<>我重述要使用的第二个词。 你有几个要考虑的事情,一个是如果你的数据要改变,另一个是如果它不改变,因为第一个存在2个解决方案,第二个只有一个。 如果您的数据如示例所示进行组织,则可以选择前3项,即 从ID不在的城市中选择*从城市中选择前3个ID 您可以创建另一个表,在其中指定哪个城市属于哪个父级,并自行创建层次结构 我建议使用第二个
select * from tbl a
where id > 4
and id < (select coalesce(b.id,a.id+1) from tbl b where b.content is null and b.id > a.id)