【问题标题】:Multiple tables query on postgispostgis上的多表查询
【发布时间】:2012-02-02 05:59:32
【问题描述】:

在 postgis 中,我有几个具有相同结构但分别代表 Mapserver 的不同层(1、2、3...)的表,

table1
       gid | name     | address       | post code  | layer |  geom
-----------+----------+---------------+------------+-------+------------
        1    'name11'     'address11'   102356       1       geom11
        2    'name12'     'address12'   102356       1       geom12
        -    'name1-'     'address1-'   102356       1       geom1-

table2
       gid | name     | address       | post code  | layer |  geom
-----------+----------+---------------+------------+-------+------------
        1    'name21'     'address21'   102356       2       geom21
        2    'name22'     'address22'   102356       2       geom22
        -    'name2-'     'address2-'   102356       2       geom2-


table3
       gid | name     | address       | post code  | layer |  geom
-----------+----------+---------------+------------+-------+------------
        1    'name31'     'address31'   102356       3       geom31
        2    'name32'     'address32'   102356       3       geom32
        -    'name3-'     'address3-'   102356       3       geom3-

我想从 table1、2、3 中获取查询结果...如果关键字匹配,请说出 name like 'name',如下所示:

输入'name',结果会是这样的

results
       gid | name     | address       | post code  | layer |  geom
-----------+----------+---------------+------------+-------+------------
        1    'name11'     'address11'   102356       1       geom11
        2    'name12'     'address12'   102356       1       geom12
        3    'name21'     'address21'   102356       2       geom21
        4    'name22'     'address22'   102356       2       geom22
        5    'name31'     'address31'   102356       3       geom31
        6    'name32'     'address32'   102356       3       geom32
        -      '-'          '-'          -----       -        --

我只需要 gid 从 1 开始重新编号,获取它们的原始 gid 值似乎没有必要:)

我可以用一个查询语句来达到这个结果吗?如何? 有什么好的想法会被采纳吗?

谢谢

【问题讨论】:

    标签: sql postgresql postgis mapserver


    【解决方案1】:

    尝试使用UNION ALLrow_number 函数,如下查询:

    SELECT 
    row_number() over (ORDER BY a.gid, a.layer) AS qid, 
    a.name, a.address, a."post code", a.layer, a.geom
    FROM
    (
    SELECT * FROM table1
    UNION ALL
    SELECT * FROM table2
    UNION ALL
    SELECT * FROM table3
    )a
    WHERE a.name like 'name%'
    

    【讨论】:

      猜你喜欢
      • 2015-05-16
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多