sql обновляет только самую старую ассоциацию многие-к-одному - PullRequest
2 голосов
/ 23 июля 2011

Учитывая таблицы в MySQL 5.0:

clients
=======
id  int

users
=====
id         int
client_id  int
is_primary tinyint

У клиента может быть много пользователей.Я хочу обновить users.is_primary = 1 только для самых маленьких users.id для users.client_id

Например, учитывая, что эти пользователи:

users
id   client_id    is_primary
============================
1    1            0
2    1            0
3    2            0
4    2            0
5    3            0

Я хочу получить:

users
id   client_id    is_primary
============================
1    1            1
2    1            0
3    2            1
4    2            0
5    3            1

Есть ли способ написать оператор обновления для этого?

Ответы [ 2 ]

4 голосов
/ 23 июля 2011

В качестве альтернативы вы можете использовать соединение следующим образом:

UPDATE users
  INNER JOIN (
    SELECT MIN(id) AS id
    FROM users
    GROUP BY client_id
  ) m ON users.id = m.id
SET users.is_primary = 1
4 голосов
/ 23 июля 2011
update users 
set is_primary = 1
where id in (select * from (select min(id) from users group by client_id) as t)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...