关于sqlite结果集交集查询

DerryZhang 2013-05-01 04:11:37
大家好,一起讨论个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语句应该怎么写?谢谢!
...全文
438 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DerryZhang 2013-05-03
  • 打赏
  • 举报
回复
使用该查询语句查询还是有问题。SQL也不是万能的,我考虑采用应用层处理了。 多谢!
ACMAIN_CHM 2013-05-02
  • 打赏
  • 举报
回复
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>
DerryZhang 2013-05-02
  • 打赏
  • 举报
回复
OK,创建表:
CREATE TABLE [MessageInfo] (id integer NOT NULL PRIMARY KEY AUTOINCREMENT,msg text NOT NULL,parent_id integer DEFAULT -1,level integer)
插入数据:
INSERT INTO MessageInfo VALUES (1, '父节点1', 0, 1)
INSERT INTO MessageInfo VALUES (2, '父节点2', 0, 1)
INSERT INTO MessageInfo VALUES (3, '父节点3', 0, 1)
INSERT INTO MessageInfo VALUES (4, '子节点1', 1, 2)
INSERT INTO MessageInfo VALUES (5, '子节点2', 1, 2)
INSERT INTO MessageInfo VALUES (6, '子节点1', 2, 2)
INSERT INTO MessageInfo VALUES (7, '子节点3', 2, 2)
INSERT INTO MessageInfo VALUES (8, '子节点5', 3, 2)
INSERT INTO MessageInfo VALUES (9, '子节点6', 3, 2)
需求:查找拥有相同子节点msg文本数据的交集。例如:查找节点id为1,2(即:“父节点1”、“父节点2”)的相同子节点交集=“子节点1”,查找节点id为1,2,3(即:“父节点1”、“父节点2”、“父节点3”)的相同子节点交集为空集。 尝试使用查询语句:
SELECT DISTINCT fi1.* FROM MessageInfo fi1, MessageInfo fi2 where fi1.id <> fi2.id and fi1.msg = fi2.msg and fi1.parent_id in(1,2) 
此时结果是正确的:'子节点1' 然而:
SELECT DISTINCT fi1.* FROM MessageInfo fi1, MessageInfo fi2 where fi1.id <> fi2.id and fi1.msg = fi2.msg and fi1.parent_id in(1,2,3) 
结果与上述查询一样,预期应该为空。 使用的数据库:Sqlite 3 thanks a lot!
ACMAIN_CHM 2013-05-01
  • 打赏
  • 举报
回复
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
内容概要:本文围绕“新型电力系统下多分布式电源接入配电网承载力评估方法”的研究,系统性地介绍了基于Matlab的仿真建模与代码实现方案,旨在评估高比例分布式电源(如光伏、风电等)接入背景下配电网的接纳能力。研究融合了智能优化算法(如蜣螂优化、灰狼优化、遗传算法)、多目标优化、鲁棒优化及双层优化模型,结合潮流计算、稳定性分析与故障仿真,构建了完整的承载力评估体系。文档不仅提供核心算法实现,还拓展至微电网调度、储能配置、电氢耦合系统、电动汽车协同等前沿方向,强调“复现+创新”相结合的科研路径,助力研究者快速掌握高水平论文复现技巧并激发原创思路。; 适合人群:具备电力系统、自动化或相关专业背景,熟悉Matlab/Simulink仿真环境,正在从事科研或工程应用的研究生及初级科研人员(工作1-3年);; 使用场景及目标:①复现高水平期刊中关于配电网承载力的优化模型;②开展高比例可再生能源接入下的配电网规划与运行研究;③学习并应用智能优化算法解决复杂电力系统问题;④获取完整科研资源包以加速课题进展与论文撰写; 阅读建议:建议读者关注公众号“荔枝科研社”获取网盘资源,下载全套代码与模型文件,按照文档结构循序渐进学习,重点理解算法设计逻辑与仿真建模细节,结合所提供的复现案例深化对优化模型与工程应用场景的理解,提升科研效率与创新能力。

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧