当前位置: 代码迷 >> 其他数据库 >> 关于sqlite结果集交集查询,该如何处理
  详细解决方案

关于sqlite结果集交集查询,该如何处理

热度:163   发布时间:2016-05-05 08:19:39.0
关于sqlite结果集交集查询
大家好,一起讨论个sql查询问题?
表结构:
-------------------------------------
id        integer     主键
msg       varchar(100) 内容
parent_id integer      父节点id
level     integer      级别
-------------------------------------
数据:
父节点1
    子节点1
    子节点2
父节点2
    子节点1
    子节点3
父节点3
    子节点5
    子节点6

需求:查找拥有相同子节点数据的交集。例如:查找节点id为1,2(即:“父节点1”、“父节点2”)的相同子节点交集=“子节点1”,查找节点id为1,2,3(即:“父节点1”、“父节点2”、“父节点3”)的相同子节点交集为空集。
那么这个sql语句应该怎么写?谢谢!
------解决方案--------------------
sqlite> select * from MessageInfo;
id
------解决方案--------------------
msg
------解决方案--------------------
parent_id
------解决方案--------------------
level
1
------解决方案--------------------
父节点1
------解决方案--------------------
0
------解决方案--------------------
1
2
------解决方案--------------------
父节点2
------解决方案--------------------
0
------解决方案--------------------
1
3
------解决方案--------------------
父节点3
------解决方案--------------------
0
------解决方案--------------------
1
4
------解决方案--------------------
子节点1
------解决方案--------------------
1
------解决方案--------------------
2
5
------解决方案--------------------
子节点2
------解决方案--------------------
1
------解决方案--------------------
2
6
------解决方案--------------------
子节点1
------解决方案--------------------
2
------解决方案--------------------
2
7
------解决方案--------------------
子节点3
------解决方案--------------------
2
------解决方案--------------------
2
8
------解决方案--------------------
子节点5
------解决方案--------------------
3
------解决方案--------------------
2
9
------解决方案--------------------
子节点6
------解决方案--------------------
3
------解决方案--------------------
2
sqlite> select *
   ...> from MessageInfo a
   ...> where exists (select 1 from MessageInfo where parent_id=1 and msg=a.msg)
   ...> and exists (select 1 from MessageInfo where parent_id=2 and msg=a.msg);
id
------解决方案--------------------
msg
------解决方案--------------------
parent_id
------解决方案--------------------
level
4
------解决方案--------------------
子节点1
------解决方案--------------------
1
------解决方案--------------------
2
6
------解决方案--------------------
子节点1
------解决方案--------------------
2
------解决方案--------------------
2
sqlite> select *
   ...> from MessageInfo a
   ...> where exists (select 1 from MessageInfo where parent_id=1 and msg=a.msg)
   ...> and exists (select 1 from MessageInfo where parent_id=2 and msg=a.msg)
   ...> and exists (select 1 from MessageInfo where parent_id=3 and msg=a.msg);
sqlite>
  相关解决方案