sql - 在左连接中从外部表中选择单行
问题描述
我想获取外键匹配的第一行。我不知道如何选择外键匹配的第一行
事件表
id | name
----------------
1 | john
----------------
2 | Cat
event_attendee 表
id | event_id | type
--------------------------
1 | 1 | User
--------------------------
2 | 1 | Local
--------------------------
3 | 1 | User
--------------------------
4 | 2 | User
--------------------------
5 | 2 | User
我想要这个结果
id | name | event_id | type
------------------------------------
1 | John | 1 | User
------------------------------------
2 | Cat | 2 | User
试过了
select
a.*,
b.*
from
events as a
left join (
select
distinct
event_attendee.events_id,
event_attendee.type
from
event_attendee
left join events on
event_attendees.events_id = events.id
where
events.id = event_attendees.events_id
limit 1
) as b on
a.id = b.events_id
问题
它仅适用于第一行,第二行显示为空
id | name | type
------------------------------------
1 | John | User
------------------------------------
2 | Cat |
解决方案
您可以使用横向连接来执行此操作。在 Postgres 中,语法是:
select e.*, ea.*
from events e left join lateral
(select ea.event_Id, ea.Type
from event_attendee ea
where ea.event_id = e.id
order by ea.id
) ea
on 1=1;
但是,distinct on
这是一种没有子查询的方法:
select distinct on (e.event_id) e.*, ea.*
from events e join
event_attendee ea
on ea.event_id = e.id
order by e.event_id, ea.id;
我希望横向连接在更大的表上工作得更好,特别是在使用正确索引的情况下。
推荐阅读
- python-2.7 - 持久存储数据?
- css - 在我现有的项目中,我看到了 SASS 文件中的代码和平。但我不明白他们为什么使用这些前缀,如 &。..在SASS
- java - 如何在 Spring Boot 中自动装配 OkHttpClient bean?
- python - 如何通过pyspark将稀疏矩阵保存到hive表中
- unit-testing - Golang:如何生成 net/http 超时错误以执行单元测试
- javascript - 如何在Angular 7中修复“分配给订阅()函数中返回未定义值的属性”
- cordova - 如何更改科尔多瓦 Windows 10 项目中的最低 Windows 目标版本?
- javascript - javascript复选框功能无法正常工作
- java - Java - Intellij 无法编译 GUI - 退出值 1
- arcgis - 如何将用户绘制的图层保存到文件(.shp 或 .tiff)中?