2017-02-10 6 views
0

Мой код выглядит следующим образом:Как выбрать все столбцы таблицы, кроме одного

CREATE TABLE tableC AS 
(SELECT tableA.*, 
    ST_Intersection (B.geom, A.geom) as geom2 -- generate geom 
FROM tableB, tableA 
JOIN tableB 
ON ST_Intersects (A.geom, b.geom) 
WHERE test.id = 2); 

Сейчас он работает, но у меня есть две колонки GeoM и geom2! Внутри столбца geom у меня будет новая геометрия, основанная на пересечении. Итак, как я могу выбрать tableA, кроме столбца geom?

+7

не поленитесь, указать столбцы вы хотите. – jarlh

+0

ОК, я могу это сделать. Я думал, может быть, будет более простой способ сделать это. Потому что у меня много столбцов внутри таблицы ... – Moehre

ответ

1

Создайте таблицу со всеми столбцами, и после этого опустить geom столбец и переименуйте новый:

CREATE TABLE tableC AS 
SELECT 
    tableA.*, 
    ST_Intersection (B.geom, A.geom) as geom2 -- generate geom 
FROM 
    tableA inner JOIN tableB ON ST_Intersects (A.geom, b.geom) 
WHERE test.id = 2 
; 

alter table tableC drop column geom; 
alter table tableC rename column geom2 to geom; 
+0

это работает спасибо :) – Moehre

0

Единственный способ, которым вы могли бы это сделать, - создать динамический оператор SQL на основе столбцов в таблице, который исключает те, которые вы не хотите. Очевидно, что это будет намного больше, чем просто добавлять во все имена столбцов.

Есть также много очень веских причин, чтобы никогда не включать select * в производственную среду, учитывая, насколько придирчивым SQL часто является число и формат возвращаемых столбцов. Используя select *, вы открываете себя для изменения результата запроса в будущем, который может потенциально нарушить работу.

Если у вас есть много столбцов, и вы просто не хотите, чтобы вручную ввести их все, выполнить запрос ниже для вашей таблицы, а затем форматировать результат, так что вы можете копировать/вставить в сценарий:

SELECT * 
FROM information_schema.columns 
WHERE table_schema = 'your_schema' 
    AND table_name = 'your_table' 
Смежные вопросы