背景:第一次发布,所以请轻松一点!-)我在5个表之间的SQLite连接中遇到了一些问题。我正在使用Python在我的Raspberry Pi上构建一个浇水系统,其表结构是在SQLite中构建的:
deviceTable - table列出所有浇水设备
programTable -表列出所有浇水程序
zoneTable -列出所有浇灌区的桌子
assignProgramTable -用于将多个浇水程序分配给多个区域的桥接表
assignDeviceTable -桥接表,用于将许多设备分配到许多浇灌区。
问题:,我目前正在使用下面的查询尝试将所有这些表连接在一起,这样我就可以开始使用多线程的脚本来控制Raspberry .我最初让它作为嵌套SQL脚本(在Python脚本中动态工作)工作,但是当试图在数据库结果中运行多个线程时,它变得有点复杂。基本上,我计划从SQL查询中获取一些键值,并且
当每个条目只应该有一个时,似乎会返回多个行。有什么最好的办法处理这件事吗?我已经找到了很多的答案,建议使用不同的选项(这是不起作用的),尽管我是否已经找到了最好的方法呢?
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的建议,我将查询更新为:
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"不幸的是这导致了更多的行被复制..。还是卡住了!
发布于 2013-11-07 10:40:29
在SQLite中,,与JOIN相同。
因此,您的查询相同,如下所示:
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。
分析你们的关系:
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一样。
https://stackoverflow.com/questions/19831194
复制相似问题