Запрос нескольких таблиц на postgis - PullRequest
2 голосов
/ 02 февраля 2012

В postgis у меня есть пара таблиц с одинаковой структурой, но обозначающих разные слои (1,2,3 ...) соответственно для Mapserver,

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-

Я хочу получить результаты запроса из таблиц 1, 2, 3 ... если ключевое слово совпадает, произнесите имя как '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 кажется необязательным :)

могу ли я достичь этих результатов одним предложением? и как? любые хорошие идеи будут оценены?

спасибо

1 Ответ

3 голосов
/ 02 февраля 2012

Попробуйте использовать UNION ALL и функцию row_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%'
...