投稿しやすいように、この問題を単純化しました。他のテーブルとはまったく関係のない構成テーブルを追加することに固執しています。私の本当の問題が何であるかを確認するためにスキップしたい場合は、現在の最終出力と必要な最終出力を見てください。便宜上、最後に機能しない SQL ソリューションを用意しました。
助けてください、事前に感謝します!
背景:
基本的に、さまざまなテーブル データを接続するための 8 つの内部結合を持つステートメントがあります。私はもともと 8 つの異なるクエリを持っていましたが、私の組み込みマシンでは、クエリはそれぞれ約 2 ~ 3 秒の長さで実行され、合計時間は約 20 ~ 30 秒になりました。これは長すぎます。その時間のほとんどは、トランザクションのセットアップとティアダウンです。クエリは非常に高速でした。1 ~ 2 秒以内にデータを取得したいので、すべてのクエリを 1 つのクエリにまとめることにしました。残念ながら、テーブル自体は組み込みデバイスからクエリできない外部データベースの複製です。この時点でデータを 1 つのテーブルに結合するつもりはありません。デバイスには python2.5 と sqlite3 しかありませんが、sqlalchemy をインストールしており、通常はコードで ORM を使用しています。不運にも、
データ
表 1: ユーザー
name | number | data
--------------------------------
alpha | 12345 | special
beta | 54321 | special-er
表 2 (表 1 とは無関係): 構成
name | data
--------------------------------
lang | eng
big | 24
medium | 20
small | 13
私が現在得ている最終的なテーブル出力:
name | number | data | config
-----------------------------------------------
alpha | 12345 | special | {null}
beta | 54321 | special-er | {null}
{null} | {null} | {null} | lang:eng
{null} | {null} | {null} | big:24
{null} | {null} | {null} | medium:20
{null} | {null} | {null} | small:13
私が欲しいものを出力するファイナルテーブル:
name | number | data | config
-----------------------------------------------
alpha | 12345 | special | lang:eng, big:24, medium:20, small:13
beta | 54321 | special-er | lang:eng, big:24, medium:20, small:13
現在の(機能していない)ソリューション
これは私がこれまでに持っているものです:
<!-- language: sql -->
SELECT *
FROM (
SELECT u.name as name
,u.number as number
,u.data as data
,NULL as config
FROM users u
UNION
SELECT NULL as name
,NULL as number
,NULL as data
,c.name||":"||c.data as config
FROM configurations c
) t