Запрос нескольких таблиц на postgis

В 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... если ключевое слово совпадает, произнесите имя, например «имя», следующим образом:

введите «имя», результаты будут такими

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 кажется не нужным :)

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

спасибо


person tiplip    schedule 02.02.2012    source источник


Ответы (1)


Попробуйте использовать 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%'
person taudorf    schedule 02.02.2012