2012-07-20 145 views
2

在其他統計軟件(STATA),當您執行兩個獨立的表之間的連接有選擇報道的結果加入有沒有辦法讓postgresql報告連接的結果?

舉例來說,如果你在一列,第二個連接與其它表的表表具有非唯一值,它報告。

同樣,如果執行內部聯接它報告的行數兩個表中丟棄,如果執行左或右外連接可以讓您知道有多少行是無法比擬的。

回答

0

據我所知是沒有選擇這樣做的Postgres內,雖然你可以通過查看估計得到一個猜測。

計算丟失行要求你計算所有行,以便數據庫通常儘量避免這樣的事情。

我能想到的選擇:

  • 寫多個查詢
  • 做了充分的外部聯接和過濾結果(可能與子查詢......想不出一個好辦法這將總是很容易的工作)
  • 使用可寫複雜的表表達式來記錄中間結果
+0

好難過!我希望SQL會假設自己:) – 2012-07-21 03:59:26

1

這將需要一個討厭的外部聯接。這裏是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) 
相關問題