首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试连接5个表时重复行

尝试连接5个表时重复行
EN

Stack Overflow用户
提问于 2013-11-07 08:36:31
回答 1查看 71关注 0票数 0

背景:第一次发布,所以请轻松一点!-)我在5个表之间的SQLite连接中遇到了一些问题。我正在使用Python在我的Raspberry Pi上构建一个浇水系统,其表结构是在SQLite中构建的:

deviceTable - table列出所有浇水设备

programTable -表列出所有浇水程序

zoneTable -列出所有浇灌区的桌子

assignProgramTable -用于将多个浇水程序分配给多个区域的桥接表

assignDeviceTable -桥接表,用于将许多设备分配到许多浇灌区。

问题:,我目前正在使用下面的查询尝试将所有这些表连接在一起,这样我就可以开始使用多线程的脚本来控制Raspberry .我最初让它作为嵌套SQL脚本(在Python脚本中动态工作)工作,但是当试图在数据库结果中运行多个线程时,它变得有点复杂。基本上,我计划从SQL查询中获取一些键值,并且

当每个条目只应该有一个时,似乎会返回多个行。有什么最好的办法处理这件事吗?我已经找到了很多的答案,建议使用不同的选项(这是不起作用的),尽管我是否已经找到了最好的方法呢?

代码语言:javascript
复制
SELECT * 
FROM deviceTable AS d, programTable AS p 
JOIN assignDeviceTable AS ad ON d.deviceID = ad.deviceID 
JOIN zoneTable AS z ON z.zoneID = a.zoneID 
JOIN assignProgramTable AS a ON p.programID = a.programID 
where p.programStatus = "1"

按照LS_dev的建议,我将查询更新为:

代码语言:javascript
复制
SELECT * 
FROM deviceTable AS d, programTable AS p, assignDeviceTable AS ad, zoneTable AS z, assignProgramTable AS ap 
JOIN deviceTable ON d.deviceID = ad.deviceID
JOIN assignDeviceTable ON ad.zoneID = z.zoneID 
JOIN zoneTable ON z.zoneID = ap.zoneID 
JOIN assignProgramTable ON ap.programID = p.programID  
where p.programStatus = "1"

不幸的是这导致了更多的行被复制..。还是卡住了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-07 10:40:29

在SQLite中,,JOIN相同。

因此,您的查询相同,如下所示:

代码语言:javascript
复制
SELECT * 
FROM deviceTable AS d
JOIN programTable AS p  -- missing ON p.some_id=d.some_id
JOIN assignDeviceTable AS ad ON d.deviceID = ad.deviceID 
JOIN zoneTable AS z ON z.zoneID = a.zoneID 
JOIN assignProgramTable AS a ON p.programID = a.programID 
where p.programStatus = "1"

您有5个表,但只有3个join约束。通常是Nconstraints = Ntables - 1

分析你们的关系:

代码语言:javascript
复制
       programTable p                    deviceTable d
           / \                               / \
(p.programID=a.programID)          (d.deviceID=ad.deviceID)
           \ /                               \ /
    assignProgramTable a             assignDeviceTable ad
           / \
   (z.zoneID=a.zoneID)
           \ /
        zoneTable z

你错过了这两组人之间的关系。根据你的解释,我认为应该像ad.zoneID = z.zoneID一样。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19831194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档