2010-09-28 3 views
1

Если у меня есть таблица SQL со столбцами:Как инвертировать столбцы в sql?

NR_A, NR_B, NR_C, NR_D, R_A, R_B, R_C 

и во время выполнения, я добавить столбцы следующая последовательность столбца таким образом, что в следующем столбце выше будет r_d с последующим R_e.

Моя проблема в том, что мне нужно сбросить значения столбцов, которые начинаются с R_ (помечены таким образом, чтобы указать, что он сбрасывается) до 0 каждый раз при повторном запуске моего скрипта. NR_ колонны кстати фиксированы, так что проще просто сказать что-то вроде:

UPDATE table set col = 0 where column name starts with 'NR_' 

Я знаю, что это не является допустимым SQL, но я думаю, что его лучший способ заявить о моей проблеме. Любые мысли?

EDIT: кстати, я использую postgres (если это поможет) и java.

+0

изменить свой тег вопроса .. какой язык вы использовали в своем проекте.tag в postgres или другом, который включен в ваш проект. – klox

+3

Если вам нужно добавить столбец во время выполнения, ваша модель серьезно ошибается. –

+0

@ j-16-sdiz: Могу ли я принять ваш комментарий как правильный ответ? Это действительно решило мою проблему. – lock

ответ

0

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

UPDATE table SET NR_A=0; 
UPDATE table SET NR_B=0; 
UPDATE table SET NR_C=0; 
UPDATE table SET NR_D=0; 

В противном случае, простой PHP скрипт может динамически создавать и выполнять запрос:

<?php 
    $db = pg_connect("host=localhost port=5432 user=postgres password=mypass dbname=mydb"); 
    if(!$db) die("Failed to connect"); 
    $reset_cols = ["A","B","C","D"]; 
    foreach ($col in $reset_cols) { 
     $sql = "UPDATE my_table SET NR_" . $col . "=0"; 
     pg_query($db,$sql); 
    } 
?> 

Вы также можете LookUp столбцы таблицы в Postgresql, запрашивая information schema columns таблицы, но вы, вероятно, нужно написать функция plpgsql для обработки результатов запроса (одна строка для столбца таблицы, начинающаяся с «NR_»).

2

SQL не поддерживает динамически именованные столбцы или таблицы - ваши варианты:

  • статический определить столбец ссылается
  • использования dynamic SQL to generate & execute запроса/запросы

Java PreparedStatements не изолируйте вы от этого - у них одна и та же проблема, только на Java.

0

Если вы предпочитаете использовать скрипт sql query, вы должны попытаться получить все столбцы на основе заданного имени табуляции.

Возможно, вы можете попробовать этот запрос, чтобы получить весь столбец на основе заданного имени таблицы для использования в вашем запросе.

SELECT attname FROM 
pg_attribute, pg_type 
WHERE typname = 'tablename' --your table name 
AND attrelid = typrelid 
AND attname NOT IN ('cmin', 'cmax', 'ctid', 'oid', 'tableoid', 'xmin', 'xmax') 
--note that this attname is sys column 

запрос будет возвращать все столбец с заданным именем таблицы, кроме колонки системы

1

Вы уверены, что вы должны добавить столбцы во время нормальной работы? Динамические датамодели в большинстве случаев представляют собой очень плохую идею. Вы увидите проблемы с блокировкой и производительностью.

Если вам нужна динамическая датамодель, взгляните на хранилище с ключом. PostgreSQL также имеет расширение hstore, проверьте вкладчик.

Смежные вопросы