Sql 将选择值替换为其他表中的值
我试图查询一个表,我想用一个相关表具有fk约束的值替换它的外键。我不知道如何用语言更好地解释它——我举了一个简单的例子来说明我的困难Sql 将选择值替换为其他表中的值,sql,postgresql,select,Sql,Postgresql,Select,我试图查询一个表,我想用一个相关表具有fk约束的值替换它的外键。我不知道如何用语言更好地解释它——我举了一个简单的例子来说明我的困难 创建表客户( cpr VARCHAR(10)主键, 名称VARCHAR(100)不为空 ); 创建表帐户( id串行主键, 余额INT默认为0, customerCpr VARCHAR(10)引用的客户(cpr)不为空, ); 创建表事务( id串行主键, 检索器INT引用的帐户(id)不为NULL, 给定者整数引用帐户(id)不为空, 时间戳时间戳默认当前时间戳
创建表客户(
cpr VARCHAR(10)主键,
名称VARCHAR(100)不为空
);
创建表帐户(
id串行主键,
余额INT默认为0,
customerCpr VARCHAR(10)引用的客户(cpr)不为空,
);
创建表事务(
id串行主键,
检索器INT引用的帐户(id)不为NULL,
给定者整数引用帐户(id)不为空,
时间戳时间戳默认当前时间戳,
金额INT不为空
);
所以我想问一些类似的问题
选择retrieverCustomer.name、giverCustomer.name、tran.timestamp tran.amount
从事务传输
其中tran.retriever=20或tran.giver=20。。。
我希望它返回以下格式:
id | retName | gName | timestamp | amount
----+-----------+-------+----------------------------+--------
1 | Elisabeth | Jonas | 2020-05-09 11:07:50.614155 | 1500
2 | Veronica | Peter | 2020-05-09 11:07:50.614155 | 2200
3 |Kristoffer | Jens | 2020-05-09 11:07:50.614155 | 1700
我不知道如何做到这一点,我尝试了一些加入和一些条件,但我没有看到这个问题通过。如果有人知道如何做到这一点,或者可以解释为什么这样做并不理想,这将真正帮助我。你想加入acounts and customers表twices,一次作为给予者,一次作为检索者:
SELECT cr.name as retriever_customer, cg.name as giver_customer, t.timestamp, t.amount
FROM transactions t
JOIN accounts ar on ar.id = t.retriever
JOIN accounts ag on ag.id = t.giver
JOIN customers cr on cr.cpr = ar.customercpr
JOIN customers cg on cg.cpr = ag.customercpr
WHERE t.retriever = 20 OR t.giver = 20
ORDER BY t.timestamp;
这是一个CTE可以证明更清晰的地方:
with ac as ( -- accounts with the customer name added on
select a.*, c.name
from accounts a join
customers c
on a.customercpr = c.cpr
)
select t.id, acg.name as giver_name, acr.name as retriever_name, t.timestamp, t.amount
from transactions t join
ac acg
on acg.id = t.giver join
ac acr
on acr.id = t.retriever
where 20 in (t.giver, t.retriever);