MySql Update Query

0

У меня есть таблица в 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  

Заранее спасибо

  • 1
    Как бы вы хотели, чтобы значения были? Пример ожидаемого результата поможет ...
  • 0
    Вопрос не ясен, вы имеете в виду, что вы хотите обновить A который является нулевым, от другого A который имеет значение?
Теги:
sql-update

3 ответа

3
Лучший ответ

Если имя может иметь только один секс, вы можете обновить все другие имена, у которых еще нет секса:

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 и не нулевым сексом.

  • 0
    Работает нормально. Но есть интересная вещь. После выполнения этого запроса, когда я обновляю любую запись в таблице вручную в любой IDE, он автоматически обновляет все строки. Можете ли вы сказать мне, пожалуйста, почему это?
  • 0
    @Novice: запрос на обновление не имеет эффекта после его завершения. Проверьте, есть ли триггеры на вашем столе?
Показать ещё 2 комментария
1

Если вы хотите установить Male для всех полей, где Null, просто запустите простое обновление:

UPDATE table SET SEX='Male' WHERE SEX IS NULL

Если вы хотите сделать это автоматически, вы должны вставить индексный столбец с индексом, чтобы ссылаться на ваш script.

0

Если я правильно понимаю, что вы хотите сделать, такой запрос будет одобрен

UPDATE TABLE T SET SEX = (SELECT SEX FROM TABLE WHERE NAME = T.NAME LIMIT 1);

но mysql не может использовать в подзапросе таблицу, используемую при обновлении, поэтому вы должны использовать уродливый трюк, подобный этому:

Ошибка MySQL 1093 - Невозможно указать целевую таблицу для обновления в предложении FROM

Ещё вопросы

Сообщество Overcoder
Наверх
Меню