Назначьте 1 произвольную строку в качестве основной для каждой группы - PullRequest
0 голосов
/ 23 апреля 2011

У меня есть таблица с тремя столбцами,

foo_id | bar_id | is_primary 

Теперь после импорта огромного количества записей все пары идентификаторов находятся, но is_primary везде равно 0, мне нужно назначить 1 произвольную строкуза foo_id как is_primary = 1?

foo_id |bar_id - это первичные уникальные ключи, однако foo_id и bar_id могут появляться несколько раз

Ответы [ 2 ]

1 голос
/ 23 апреля 2011

Предполагая, что все пары (foo_id, bar_id) уникальны, а is_primary ограничен 0 или 1 (т. Е. Никакими другими значениями или NULL), вы можете определить, например, минимальное значение bar_id для каждого foo_id значение и установите is_primary в 1 для соответствующих строк:

UPDATE atable t
  INNER JOIN (
    SELECT
      foo_id,
      MIN(bar_id) AS bar_id
    FROM atable
    GROUP BY foo_id
    HAVING MAX(is_primary) = 0
  ) s ON t.foo_id = s.foo_id AND t.bar_id = s.bar_id
SET t.is_primary = 1
0 голосов
/ 23 апреля 2011

Предполагая, что (foo_id,bar_id) уникален, вы можете использовать предложение not exists для фильтрации наибольшего значения bar_id за foo_id:

update  YourTable yt1
set     is_primary = 1
where   not exists
        (
        select  *
        from    YourTable yt2
        where   yt2.foo_id = yt1.foo_id
                and yt2.bar_id > yt1.bar_id
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...