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

网友分享于:2015-09-23 16:51 发表在 其他数据库
关于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>
推荐分类: 数据库 SQL MySQL NoSQL Oracle技术 Oracle管理 Oracle开发 Oracle面试 Oracle Exception Sql Server Informix Sybase DB2 Access VFP 数据仓库 高性能数据库开发 其他数据库
推荐标签: php websocket input navicat finereport
相关文章
最新发表
热门推荐