0

3つのテーブルを持つデータベースがあります。

表1

CREATE TABLE "A" ( "id" INTEGER PRIMARY KEY  NOT NULL 
                  ,"cat_id" INTEGER NOT NULL
                  ,"date" DATETIME NOT NULL
                  ,"amount" VARCHAR NOT NULL  DEFAULT (0.0)
                  ,"notes" VARCHAR)

表2:

CREATE TABLE "B" ( "id" INTEGER PRIMARY KEY  NOT NULL
                  ,"cat_id" INTEGER NOT NULL
                  ,"date" DATETIME NOT NULL
                  ,"amount" VARCHAR NOT NULL  DEFAULT (0.0)
                  ,"notes" VARCHAR)

表3:

CREATE TABLE "c" ( "id" INTEGER PRIMARY KEY  NOT NULL
                  ,"parent_id" INTEGER NOT NULL  DEFAULT (0)
                  ,"name" VARCHAR NOT NULL
                  ,"position" INTEGER NOT NULL
                  ,"importance" INTEGER NOT NULL  DEFAULT (0)
                  ,"transaction_type" VARCHAR NOT NULL  DEFAULT expenses
                  ,"icon" VARCHAR NOT NULL  DEFAULT default
                  ,"budget" INTEGER NOT NULL  DEFAULT 0
                  ,"status" INTEGER NOT NULL  DEFAULT 1)

このステートメントを使用して、テーブルから選択しAますB

SELECT * FROM A
UNION ALL
SELECT * FROM B 
ORDER BY date 

Cこのselectステートメントの結果を3番目のテーブルと結合したいと思います。

RIGHT JOIN C on A.cat_id = C.id
RIGHT JOIN C on B.cat_id = C.id

これどうやってするの?!

4

2 に答える 2

3

SQL 言語の要素を組み合わせるだけで実現できます。

select ab.*, c.*
from ((SELECT *
       FROM A
      ) UNION ALL
      (SELECT *
       FROM B
      )
     ) ab right join
     C
     on ab.cat_id = c.id
ORDER BY date

これにより、ユニオンがすべてサブクエリになり、そこから結合が行われます。

于 2012-08-23T02:19:13.087 に答える
0

また、テーブルを結合して結合することもできます) 数学の分配特性のように:

select *
from (
      (SELECT * FROM A right join C
        on ab.cat_id = c.id) 
      UNION ALL
      (SELECT * FROM B right join C
        on ab.cat_id = c.id)
     ) ab 
ORDER BY date

ただし、二重結合のため、これは最善の方法ではありません。

于 2012-08-23T02:34:03.480 に答える