【问题标题】:Match two ids from the table to a different table PgSQL将表中的两个 id 匹配到不同的表 PgSQL
【发布时间】:2020-11-21 05:25:35
【问题描述】:

所以,我有一个 exchange_rate 表,其中包含 fromcurr_id 和 tocurr_id,并且根据 id 的货币名称在另一个表 currency 中。

exchng_rate_id | fromcurr_id | tocurr_id | exchange_rate 
----------------+-------------+-----------+---------------
              1 |           1 |         2 |  5.0000000000
              2 |           1 |         3 |  3.0000000000
              3 |           1 |         4 |  6.0000000000
              4 |           1 |         5 |  2.0000000000
              5 |           2 |         3 |  5.0000000000
              6 |           2 |         4 |  7.0000000000
              7 |           2 |         5 |  3.0000000000
              8 |           3 |         4 |  1.0000000000
              9 |           3 |         5 |  4.0000000000
             10 |           4 |         5 |  2.0000000000

这里是货币表的描述:

Column  |          Type          | Collation | Nullable |               Default                
---------+------------------------+-----------+----------+--------------------------------------
 id      | integer                |           | not null | nextval('currency_id_seq'::regclass)
 curr_id | integer                |           | not null | 
 name    | character varying(255) |           |          | 

我需要显示哪个 id 属于哪个货币名称。(即 fromcurr_id = name 和 tocurr_id = name)

这是我尝试过的......

查询1: 尝试对表进行内部连接,但结果仅产生 fromcurr_id 的名称。

select name, fromcurr_id, tocurr_id, name, exchange_rate 
from exchange_rate 
  inner join currency on exchange_rate.fromcurr_id = currency.curr_id;

结果:

      name      | fromcurr_id | tocurr_id |      name      | exchange_rate 
----------------+-------------+-----------+----------------+---------------
 ************** |           1 |         2 | ************** |  5.0000000000
 ************** |           1 |         3 | ************** |  3.0000000000
 ************** |           1 |         4 | ************** |  6.0000000000
 ************** |           1 |         5 | ************** |  2.0000000000
 *************  |           2 |         3 | ************   |  5.0000000000
 ************   |           2 |         4 |**************  |  7.0000000000
 *************  |           2 |         5 | ************   |  3.0000000000
 ************** |           3 |         4 | ************** |  1.0000000000
 ************** |           3 |         5 | ************** |  4.0000000000
 ************** |           4 |         5 | ************** |  2.0000000000
(10 rows)

第一种情况的名称与第二种情况相同,而不是根据货币表。 (必须审查数据保密)


查询2: 尝试了两个条件的内连接。

select name, fromcurr_id, tocurr_id, name, exchange_rate 
from exchange_rate 
  inner join currency on exchange_rate.fromcurr_id = currency.curr_id 
                     and exchange_rate.tocurr_id = currency.curr_id;

这显示没有结果。

【问题讨论】:

    标签: sql postgresql join inner-join


    【解决方案1】:

    您需要两个joins,每个货币一个:

    select er.*, cfrom.*, cto.*
    from exchange_rate er inner join
         currency cfrom
         on er.fromcurr_id = cfrom.curr_id join
         current cto
         on er.tocurr_id = eto.curr_id
    

    【讨论】:

    • 两个连接工作。谢谢。 ``` select e.fromcurr_id , c.name, e.tocurr_id, c1.name,e.exchange_rate from exchange_rate e 内联货币 c on e.fromcurr_id = c.curr_id 内联货币 c1 on e.tocurr_id = c1.curr_id ; ```
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    相关资源
    最近更新 更多