背景:初投稿なのでお手柔らかに!;-) 5 つのテーブルにまたがる SQLite 結合に問題があります。Python を使用して、Raspberry Pi で散水システムを構築しています。次のテーブル構造が SQLite に組み込まれています。
deviceTable - すべての給水装置を一覧表示するテーブル
programTable - すべての散水プログラムを一覧表示するテーブル
zoneTable - すべての給水ゾーンを一覧表示するテーブル
assignProgramTable - 多くの散水プログラムを多くのゾーンに割り当てるためのブリッジ テーブル
assignDeviceTable - 多くの散水ゾーンに多くのデバイスを割り当てるためのブリッジ テーブル。
問題:現在、次のクエリを使用してこれらのテーブルをすべて結合しようとしています。これにより、マルチスレッド Python スクリプトで Raspberry Pi を制御できるようになります...当初、これはネストされた SQL スクリプトとして機能していました (私の Python スクリプトで動的に動作しています) が、データベースの結果内で複数のスレッドを実行しようとすると少し複雑になりました。基本的に、SQL クエリからいくつかのキー値を取得し、
エントリごとに 1 つしかないはずなのに、複数の行が返されているようです。これを処理する最善の方法はありますか? DISTINCTオプションを使用することを提案する多くの回答を見つけました(これは機能しませんでした)が、これを可能な限り最善の方法で行っていますか?
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"
残念ながら、これによりさらに多くの行が複製されました...まだスタックしています!