0

私は5つのテーブル(tbl1、tbl2、tbl3、tbl4、tbl5)を持っていますが、それらはすべて同様の列を持っていますが、fkは共有されていません。タイムスタンプ (各テーブルにある列) の順にアイテムのリストをコンパイルする必要があります。次のことを試しましたが、うまくいきませんでした。

SELECT 
    t1.id, t1.name, t1.created,
    t2.id, t2.name, t2.created,
    t3.id, t3.name, t3.created,
    t4.id, t4.name, t4.created,
    t5.id, t5.name, t5.created
FROM tbl1 t1, tbl2 t2, tbl3 t3, tbl4 t4, tbl5 t5;

明らかに、上記はタイムスタンプ列でソートされませんが、「ORDER BY」句を追加する前に、このような作業を行う必要があります。

(ビューを作成せずに) 5 つのテーブルからデータを返すクエリを実行する方法はありますか (一部のテーブルが空の場合のイベント)。

4

2 に答える 2

1

あなたが探しているのはUNION ALLオペレーターのようです。

SELECT t1.id, t1.name, t1.created FROM tbl1 t1
 UNION ALL 
SELECT t2.id, t2.name, t2.created FROM tbl2 t2
 UNION ALL 
SELECT t3.id, t3.name, t3.created FROM tbl3 t3
 UNION ALL 
SELECT t4.id, t4.name, t4.created FROM tbl4 t4
 UNION ALL 
SELECT t5.id, t5.name, t5.created FROM tbl5 t5
 ORDER BY 3

演算子はUNION ALL基本的に、クエリの結果を 1 つの結果セットに連結します。式の数と各式のデータ型は、すべてのクエリで一致する必要があることに注意してください。(クエリの 1 つに余分な列を含める必要がある場合は、他のクエリに対応する式 (ダミーのプレースホルダーでも) を追加する必要があります。

このようなクエリを実行する場合、どのソース クエリが行を返したかを示す式 (列) を含めると役立つ場合があります。

SELECT 't1' as source, t1.id, t1.name, t1.created FROM tbl1 t1
 UNION ALL 
SELECT 't2', t2.id, t2.name, t2.created FROM tbl2 t2
 UNION ALL 
SELECT 't3', t3.id, t3.name, t3.created FROM tbl3 t3
 UNION ALL 
SELECT 't4', t4.id, t4.name, t4.created FROM tbl4 t4
 UNION ALL 
SELECT 't5', t5.id, t5.name, t5.created FROM tbl5 t5
 ORDER BY 4

ORDER BY は結果セット全体に適用されることに注意してください。列の位置で並べ替える式を参照する必要があります。

于 2012-06-20T16:12:54.187 に答える
0

UNION ALLを使用する

SELECT id, name, created FROM tbl1
UNION ALL
SELECT id, name, created FROM tbl2
UNION ALL
SELECT id, name, created FROM tbl3
UNION ALL
SELECT id, name, created FROM tbl4
UNION ALL
SELECT id, name, created FROM tbl5
于 2012-06-20T16:13:14.220 に答える