2012-08-23 44 views
0

結果我有三個表的數據庫:使從2和表2個select語句然後再加入與第三個表

表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) 

我用這個語句從表AB選擇:

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

我想加入這個SELECT語句的結果與第三個表C有:

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

我怎樣才能做到這一點?

回答

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 

這使得工會所有的子查詢,然後做從那裏加入。

+0

感謝烏拉圭回合重播,我的問題解決了:),但沒有內側支架所以它與我的工作就像是:選擇AB *,C * 從(SELECT * 從 UNION ALL SELECT * FROM B )ab right join C on ab.cat_id = c.id ORDER BY date – Yahia

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 

Hovewer,這是不是最好的方式,由於雙加盟。