关于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 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>