在其他统计软件(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