2016-02-23 5 views
0

У меня есть таблица:PostgreSQL - поиск и обновление нескольких записей

ID | rows | dimensions 
---+------+----------- 
1 | 1 | 15 x 20 
2 | 3 | 2 x 10 
3 | 5 | 23 x 33 
3 | 7 | 15 x 23 
4 | 2 | 12 x 32  

И я хочу, чтобы иметь что-то вроде этого:

ID | rows | dimensions 
---+------+----------- 
1 | 1 | 15 x 20 
2 | 3 | 2 x 10 
3a | 5 | 23 x 33 
3b | 7 | 15 x 23 
4 | 2 | 12 x 32 

Как я могу найти несколько значение идентификатора, чтобы сделать его уникальным ?

Как обновить родительскую таблицу после?

Благодарим за помощь!

+0

убедитесь, что вы правильно пометить ваши вопросы. вы отметили это с помощью mysql, базы данных и postgresql. Тэг mysql неверен, общая база данных, возможно, не нужна, когда она помечена как postgresql, поскольку это не общий вопрос, а специфический для postgresql. – Niagaradad

+0

Какую родительскую таблицу вы имеете в виду? Когда вы делаете 3a и 3b, чтобы различать их как отдельные, имеет ли значение то, что вы указываете как «a», а какая строка - «b»? – Niagaradad

+0

У меня таблица подсчета как 154 записи. Поэтому мне нужно найти дублированные записи и добавить к ним письмо или номер, чтобы сделать его другим. Родительский стол Я имею в виду, что таблица без букв, поэтому без уникальных идентификаторов – axeMaltesse

ответ

1
with stats as (
    SELECT "ID", 
      "rows", 
      row_number() over (partition by "ID" order by rows) as rn, 
      count(*) over (partition by "ID") as cnt 
    FROM Table1 
) 
UPDATE Table1 
    SET "ID" = CASE WHEN s.cnt > 1 THEN s."ID" || '-' || s.rn 
        ELSE s."ID" 
       END 
    FROM stats s 
WHERE S."ID" = Table1."ID" 
    AND S."rows" = Table1."rows" 

Я предполагаю, что вы не можете иметь два ряда с одинаковым ID и тем же rows других мудрым вам необходимо включить "dimensions" на WHERE тоже.

В этом случае выход

enter image description here