PostgreSQL:根据连接中的多行创建布尔字段

时间:2013-08-15 22:13:17

标签: sql postgresql boolean duplication

我从许多表中的一个数据库中收集了许多字段(6)。一列导致某些数据重复。如果我的一个或多个参数为true,我想为该字段创建一个布尔值,并按其余字段分组。

几何表和地址表之间存在一对多的关系(每条道路的两侧)。所以,问题在于道路的每一侧都会有一个值,因此有多个回报。我玩过bool_or,case,coalesce,exists,array_agg,但无法弄明白。有任何想法吗?

select g.country, g.id, n.name, gsc.geometry, gst.class, gst.length, gst.road_type,     gst.one_way, gst.bridge, ga.add_type
from geo g
left outer join name n on (g.id = n.id)
left outer join geometry_address ga on (g.id = ga.id)
join geometry_s gst on (g.is = gst.is)
join geometry_s gs on (g.id = gs.id)
join geometry_sc gsc on (gs.gsi = gsc.gsi)
where (g.type = 'road') and (g.country = 'USA')

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

首先,您需要提供您正在做的事情以及哪些字段是问题所在。但基本上,我会使用以下内容。

      SELECT t1.fld1, t1.fld2, bool_or(t2.fld1)
        FROM mytable t1
   LEFT JOIN my_other_table t2 ON (t1.pkey1 = t2.fkey_mytable)
    GROUP BY t1.fld1, t1.fld2;

在不熟悉的领域构建大型查询的一些建议,因为这可能是问题所在:

  1. 从问题区域中的最小连接开始。玩它直到它工作。然后添加其余部分。

  2. 仔细跟踪错误以及您尝试过的内容。