sql - 添加带有示例数据的字段

标签 sql postgresql

我正在创建 sql 查询以获取特定记录。 我需要包含 site_name;device_name 列的记录,我在其中列出了所有站点,每个站点都有一个示例设备。

t1:view_building_custom_fields_flat_v1 字段:building_fk、site_name

t2:带有字段的 view_building_v1:building_pk、device_fk

t3:view_device_v1 字段:device_pk、building_fk、device_name

t1 是 t2 的辅助表,因此关系是一对一的,但是大楼有多个设备,所以关系是一对多的。

我已经构建了一个查询,列出了目前为止每个建筑物的所有设备:

SELECT
 view_building_custom_fields_flat_v1.site_name,
 view_device_v1.device_name
FROM view_building_custom_fields_flat_v1
INNER JOIN view_building_v1 ON view_building_custom_fields_flat_v1.building_fk=view_building_v1.building_pk
INNER JOIN view_device_v1 ON view_building_v1.building_pk=view_device_v1.building_fk
ORDER BY view_building_custom_fields_flat_v1.site_name ASC

我知道对于我的代码,我不能指望别的,但如果有人能帮助我修改它以满足我的要求,我会很棒。

最佳答案

如果您希望每个 site_name 一行,您可以使用 DISTINCT ON:

SELECT DISTINCT ON (cff.site_name) cff.site_name, d.device_name
FROM view_building_custom_fields_flat_v1 cff JOIN 
     view_building_v1 b
     ON cff.building_fk = b.building_pk JOIN
     view_device_v1 d
     ON b.building_pk = d.building_fk
ORDER BY cff.site_name ASC;

关于sql - 添加带有示例数据的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55930374/

相关文章:

sql - PostgreSQL 不会递归地撤销角色

c - libpq - PQconnectdb 失败时 PQreset

postgresql - 从Postgresql中的列中的多个单词的条目中提取单个单词

sql - 获取时区时间

MySQL 通过键选择行或回退到默认键选择

sql - 存储过程按优先级返回基于可为空列的数据

sql - Postgres IF table.x > table.y

PHP mySQL 网站搜索脚本

mysql - 如何根据Mysql中的唯一id获取每个值的计数

postgresql - PostgreSQL 中有没有办法找到所有使用外部数据包装器的 View ?