У меня есть таблица в MySQL со следующими данными
NAME SEX
A Male
B Female
C Male
A Null
B Null
C Null
D Null
как я могу обновить SEX
из предыдущих строк?
Вывод:
NAME SEX
A Male
B Female
C Male
A Male
B Female
C Male
D Null
Заранее спасибо
Если имя может иметь только один секс, вы можете обновить все другие имена, у которых еще нет секса:
update YourTable yt1
join (
select name
, max(sex) as maxSex
from YourTable
group by
name
) yt2
on yt1.name = yt2.name
and yt2.maxSex is not null
set yt1.sex = yt2.maxSex
where yt1.sex is null;
В вашем примере это будет заполнять пол для каждой строки, кроме D, так как нет записи с именем D и не нулевым сексом.
Если вы хотите установить Male
для всех полей, где Null
, просто запустите простое обновление:
UPDATE table SET SEX='Male' WHERE SEX IS NULL
Если вы хотите сделать это автоматически, вы должны вставить индексный столбец с индексом, чтобы ссылаться на ваш script.
Если я правильно понимаю, что вы хотите сделать, такой запрос будет одобрен
UPDATE TABLE T SET SEX = (SELECT SEX FROM TABLE WHERE NAME = T.NAME LIMIT 1);
но mysql не может использовать в подзапросе таблицу, используемую при обновлении, поэтому вы должны использовать уродливый трюк, подобный этому:
Ошибка MySQL 1093 - Невозможно указать целевую таблицу для обновления в предложении FROM
A
который является нулевым, от другогоA
который имеет значение?