sql - 有没有办法让 postgresql 报告连接的结果?

标签 sql postgresql join

在其他统计软件 (STATA) 中,当您在两个单独的表之间执行连接时,可以选择报告连接结果

例如,如果您将一个表与另一个表连接到一个列上,而第二个表具有非唯一值,它会报告这一点。

同样,如果您执行内部联接,它会报告从两个表中删除的行数,如果您执行左外部联接或右外部联接,它会告诉您有多少行不匹配。

最佳答案

它将需要一个讨厌的外部连接。这是 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 - 有没有办法让 postgresql 报告连接的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11585301/

相关文章:

mysql 库存交易 - 获取位置的序列列表

mysql - 在字符之前查找唯一值的计数

php - MySQL 查询返回表中未签名的内容不再有效

java - 将字符串转换为 "yyyy-MM-dd HH:mm:ss"时出现无法解析的日期异常

php - 输入字段提交最后一个索引,未选择索引

sql - 在大量基于 postgreSQL 文件的项目中管理 sql 文件的最佳实践是什么?

javascript - 使用knex动态创建连接表

postgresql - 基于 SELECT 条件的 postgres 约束

php - MYSQL用左连接连接3个表

mysql join 逻辑运算符