首页 > 解决方案 > 如何使用 sql 加入 2 个表(尝试内连接但没有得到我想要的结果)

问题描述

例如,我有 2 个表:

city_A    city_B
-------------------
A          B       
A          C 
B          A
B          C
C          A
C          B



    city     number_of_covid    date
    -------------------------------
    A          3              2020-02-01 
    A          6              2020-02-02 
    B          2              2020-02-01
    B          9              2020-02-02
    C          4              2020-02-01
    C          10             2020-02-02

我想要这样的东西:

city_A  total_covid_in_A  city_B  total_covid_in_B   date
--------------------------------------------------------------
  A          3             B           2           2020-02-01
  A          6             B           9           2020-02-02
  A          3             C           4           2020-02-01
  A          6             C           10          2020-02-02
  B          2             A           3           2020-02-01
  B          9             A           6           2020-02-02
  B          2             C           4           2020-02-01
  B          9             C           10          2020-02-02
  C          4             A           3           2020-02-01
  C          10            A           6           2020-02-02
  C          4             B           2           2020-02-01
  C          10            B           9           2020-02-02

如何使用 SQL 查询来做到这一点?我尝试使用内部连接,但没有得到我想要的结果

标签: sqlpostgresql

解决方案


您的问题没有解释需要如何链接日期。如果我要进行简单的联接操作,我还希望记录“city_a 为 A,city_b 为 B,日期为 '2020-02-02' ",但你的结果集没有显示它。我假设你想按照 city_b 的字母顺序从每天开始分配 covid 病例数。以下查询将帮助您获得所需的结果集:

SELECT c.city_a
    ,c.total_covid_in_a
    ,c.city_b
    ,d.number_of_covid AS total_covid_in_b
    ,c."date"
FROM
    (
    SELECT a.city_a
        ,b.number_of_covid AS total_covid_in_a
        ,a.city_b
        ,b."date"
    FROM 
        (
        SELECT DISTINCT city_a
            ,city_b
            ,ROW_NUMBER() OVER (PARTITION BY city_a ORDER BY city_b ASC) AS rnk
        FROM Table1
    ) a
    JOIN (
        SELECT DISTINCT city
            ,number_of_covid
            ,"date"
            ,ROW_NUMBER() OVER (PARTITION BY city ORDER BY "date" ASC) AS rnk
        FROM Table2
    ) b
        ON a.city_a = b.city
            AND a.rnk = b.rnk
) c
JOIN Table2 d
    ON c.city_b = d.city
        AND c."date" = d."date"
ORDER BY city_a, city_b;

推荐阅读