在其他統計軟件(STATA),當您執行兩個獨立的表之間的連接有選擇報道的結果加入有沒有辦法讓postgresql報告連接的結果?
舉例來說,如果你在一列,第二個連接與其它表的表表具有非唯一值,它報告。
同樣,如果執行內部聯接它報告的行數兩個表中丟棄,如果執行左或右外連接可以讓您知道有多少行是無法比擬的。
在其他統計軟件(STATA),當您執行兩個獨立的表之間的連接有選擇報道的結果加入有沒有辦法讓postgresql報告連接的結果?
舉例來說,如果你在一列,第二個連接與其它表的表表具有非唯一值,它報告。
同樣,如果執行內部聯接它報告的行數兩個表中丟棄,如果執行左或右外連接可以讓您知道有多少行是無法比擬的。
據我所知是沒有選擇這樣做的Postgres內,雖然你可以通過查看估計得到一個猜測。
計算丟失行要求你計算所有行,以便數據庫通常儘量避免這樣的事情。
我能想到的選擇:
這將需要一個討厭的外部聯接。這裏是CTE版本:
-- Some data
CREATE TABLE bob
(ID INTEGER NOT NULL
, zname varchar
);
INSERT INTO bob(id, zname) VALUES
(2, 'Alice') ,(3, 'Charly')
,(4,'David') ,(5, 'Edsger') ,(6, 'Fanny')
;
CREATE TABLE john
(ID INTEGER NOT NULL
, zname varchar
);
INSERT INTO john(id, zname) VALUES
(4,'David') ,(5, 'Edsger') ,(6, 'Fanny')
,(7,'Gerard') ,(8, 'Hendrik') ,(9, 'Irene'), (10, 'Joop')
;
--
-- Encode presence in bob as 1, presence in John AS 2, both=3
--
WITH flags AS (
WITH b AS (
SELECT 1::integer AS flag, id
FROM bob
)
, j AS (
SELECT 2::integer AS flag, id
FROM john
)
SELECT COALESCE(b.flag, 0) + COALESCE(j.flag, 0) AS flag
FROM b
FULL OUTER JOIN j ON b.id = j.id
)
SELECT flag, COUNT(*)
FROM flags
GROUP BY flag;
結果:
CREATE TABLE
INSERT 0 5
CREATE TABLE
INSERT 0 7
flag | count
------+-------
1 | 2
3 | 3
2 | 4
(3 rows)
好難過!我希望SQL會假設自己:) – 2012-07-21 03:59:26