sql >> Databáze >  >> RDS >> Database

Jak aktualizovat sloupec na základě filtru jiného sloupce

V tomto tutoriálu si projdeme různé způsoby aktualizace řádků v tabulce pomocí SQL od obecnějších aktualizací ke specifičtějším metodám.

Úplná aktualizace

Pokud je potřeba aktualizovat každé pole na stejnou hodnotu, můžete to udělat pomocí jednoduchého UPDATE příkaz.

UPDATE table
SET col = new_value;

Podmíněná aktualizace

Chcete-li provést podmíněnou aktualizaci v závislosti na tom, zda aktuální hodnota sloupce odpovídá podmínce, můžete přidat WHERE klauzule, která to specifikuje. Databáze nejprve najde řádky, které odpovídají WHERE klauzule a poté provádět aktualizace pouze na těchto řádcích.

UPDATE table
SET col = new_value
WHERE col = old_value;

Chcete-li to rozšířit, můžete do WHERE přidat cokoli klauzuli, kterou máte rádi, pokud je to platný výraz. Chcete-li tedy provést aktualizaci na základě hodnoty jiného sloupce ve stejné tabulce, můžete provést následující:

UPDATE table
SET col = new_value
WHERE other_col = some_other_value;

Protože WHERE klauzule může obsahovat jakýkoli platný výraz, máte také možnost provádět aktualizace tam, kde kritériím vyhovuje více sloupců

UPDATE table
SET col = new_value
WHERE col = old_value
AND other_col = some_other_value;

UPDATE table
SET col = new_value
WHERE col = old_value
OR other_col = some_other_value;

Jak vidíte, můžete rozbalit WHERE klauzule tolik, kolik chcete, abyste mohli filtrovat řádky pro aktualizaci na to, co potřebujete.

Co se nyní stane, pokud chcete aktualizovat řádky v jedné tabulce na základě stavu jiné tabulky? Tato otázka vede k několika různým způsobům, jak to můžete udělat.

Protože WHERE klauzule může obsahovat jakýkoli platný výraz, můžete použít poddotaz:

UPDATE table
SET col = new_value
WHERE other_col IN (
SELECT other_col
FROM other_table
WHERE conditional_col = 1
);

Můžete také použít poddotaz v SET část příkazu, pokud chcete sloupec nastavit na hodnotu v jiné tabulce

UPDATE table
SET col = (
SELECT other_col
FROM other_table
WHERE other_table.table_id = table.id
);

Snad jednodušším způsobem je zadat více tabulek po UPDATE doložka. Pouze SET výraz provede aktualizace, ale uvedení dalších tabulek umožní zahrnutí tabulek.

UPDATE table, other_table
SET table.col = other_table.other_col
WHERE table.id = other_table.table_id;

Podobně jako rozbalení WHERE klauzule, počet tabulek lze rozšířit tak, aby zahrnoval všechny tabulky, které potřebujete, pokud máte více tabulek, které je třeba spojit.


  1. Mohu přidat UNIQUE omezení do tabulky PostgreSQL poté, co je již vytvořena?

  2. INSERT INTO @TABLE EXEC @query s SQL Server 2000

  3. PRVG-2027 Vlastník souboru je mezi uzly nekonzistentní

  4. Správná metoda odstranění více než 2100 řádků (podle ID) pomocí Dapper