sql - 使用子查询加入表
问题描述
我有一个起始表,它来自一个查询:
CREATE TABLE my_base
(
the_id varchar(6) NOT NULL,
the_pay int NOT NULL,
the_name varchar(10) NOT NULL
)
INSERT INTO my_base
VALUES ('LMUS01', '2000', 'JOE'),
('LMUS02', '1500', 'JACK')
还有一个债务数据“my_table”:
CREATE TABLE my_table
(
the_debt_id varchar(6) NOT NULL,
the_debt_amount int NOT NULL,
the_debt_date date NOT NULL
)
INSERT INTO my_table
VALUES ('LMUS01', '180', '2/12/2019'),
('LMUS01', '200', '2/11/2019'),
('LMUS01', '300', '2/13/2019'),
('LMUS02', '100', '2/10/2019'),
('LMUS02', '150', '2/12/2019')
而我想要的查询是“my_base”中的所有记录加入到“my_table”中变量“the_debt_date”的最小值:
'LMUS01','2000','JOE','200','2/11/2019'
'LMUS02','1500','JACK','100','2/10/2019'
当我在“my_table”中一一进行时,我使用以下查询:
SELECT the_debt_amount, the_debt_date FROM my_table
WHERE the_debt_id = 'LMUS01'
AND the_debt_date = (select min(the_debt_date)
FROM my_table WHERE the_debt_id = 'LMUS01')
但我想要“my_base”中的所有记录。我试过了:
SELECT * FROM my_base
LEFT JOIN my_table ON the_debt_id = the_id WHERE the_id = the_debt_id
AND the_debt_date = (select min(the_debt_date) FROM my_table WHERE the_id = the_debt_id)
但它发送一个错误。任何帮助将不胜感激。
解决方案
使用distinct on
:
SELECT DISTINCT ON (b.the_id) b.*, t.*
FROM my_base b LEFT JOIN
my_table t
ON t.the_debt_id = b.the_id
ORDER BY b.the_id, t.the_debt_date asc;
该WHERE
子句撤消外连接。但无论如何都不需要它。
推荐阅读
- sockets - ZeroMQ:恰好两个对等方之间进行任意通信的套接字类型是什么?
- docker - 如何在 Cloud Run 中以特权身份运行 docker 容器
- netweaver - 安装 SAP NetWeaver 7.52 SP04/errno=CJS-30273
- java - 同一个Object在Executor Service上使用时如何设置不同的参数?
- python - 如何用字符串训练机器学习?
- javascript - NextJS 将表单发布到内部 API
- flutter - 我有一个底部导航,但我通过单击页面上的按钮进行导航
- python - 3D vtk 对象在沿方向向量对齐后移动
- javascript - 如何使用 Fetch 发布 x-www-form-urlencoded 请求并使用答案?
- c++ - 无法使用实例化的 json_pointer 更新 nlohmann::json 文档