我正在创建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
我知道我的代码对我无能为力,但是如果有人可以帮助我对其进行修改以满足我的要求,那将是很棒的事情。
答案 0 :(得分:0)
如果您希望每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;