SQL ustawia wartości jednej kolumny równe wartościom innej kolumny w tej samej tabeli

97

Mam tabelę z dwiema kolumnami DATETIME.

Jeden z nich nigdy nie jest NULL, ale jeden z nich czasami jest NULL.

Muszę napisać zapytanie, które ustawi wszystkie wiersze NULL w kolumnie B równe wartościom w kolumnie A.

Wypróbowałem ten przykład, ale SQL w wybranej odpowiedzi nie jest wykonywany, ponieważ MySQL Workbench nie lubi FROM w UPDATE.

user1002358
źródło

Odpowiedzi:

159

Wygląda na to, że pracujesz tylko przy jednym stole, więc coś takiego:

update your_table
set B = A
where B is null
mu jest za krótkie
źródło
21
UPDATE YourTable
SET ColumnB=ColumnA
WHERE
ColumnB IS NULL 
AND ColumnA IS NOT NULL
Ikar
źródło
21

Zrobiłbym to w ten sposób:

UPDATE YourTable SET B = COALESCE(B, A);

COALESCE to funkcja, która zwraca swój pierwszy niezerowy argument.

W tym przykładzie, jeśli B w danym wierszu nie ma wartości null, aktualizacja nie jest wykonywana.

Jeśli B jest null, COALESCE pomija go i zamiast tego używa A.

Bill Karwin
źródło
5

Nie sądzę, że szukasz innego przykładu. Jeśli aktualizujesz tylko jedną kolumnę z innej kolumny w tej samej tabeli, powinieneś móc użyć czegoś takiego.

update some_table set null_column = not_null_column where null_column is null
rwilliams
źródło
1

Oto przykładowy kod, który może pomóc w skopiowaniu kolumny A do kolumny B:

UPDATE YourTable
SET ColumnB = ColumnA
WHERE
ColumnB IS NULL
AND ColumnA IS NOT NULL;
Waruna Manjula
źródło
Uwaga moderatora - nie cofaj ważnych aktualizacji swojego posta.
Bhargav Rao