sql >> Database >  >> RDS >> Database

Een kolom bijwerken op basis van een filter van een andere kolom

In deze zelfstudie bespreken we de verschillende manieren om rijen in een tabel bij te werken met behulp van SQL, van meer algemene updates naar meer specifieke methoden.

Volledige update

Als elk veld moet worden bijgewerkt naar dezelfde waarde, kunt u dat doen met een eenvoudige UPDATE commando.

UPDATE table
SET col = new_value;

Voorwaardelijke update

Om een ​​voorwaardelijke update uit te voeren, afhankelijk van of de huidige waarde van een kolom overeenkomt met de voorwaarde, kunt u een WHERE toevoegen clausule die dit specificeert. De database zal eerst rijen vinden die overeenkomen met de WHERE clausule en voer dan alleen updates uit op die rijen.

UPDATE table
SET col = new_value
WHERE col = old_value;

Om dit uit te breiden, kun je alles toevoegen aan de WHERE clausule die u leuk vindt, zolang het maar een geldige uitdrukking is. Dus om een ​​update uit te voeren op basis van de waarde van een andere kolom in dezelfde tabel, kunt u het volgende uitvoeren:

UPDATE table
SET col = new_value
WHERE other_col = some_other_value;

Sinds de WHERE clausule kan elke geldige uitdrukking bevatten, je hebt ook de mogelijkheid om updates uit te voeren waar meerdere kolommen aan de criteria voldoen

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;

Zoals je kunt zien, kun je de WHERE . uitvouwen clausule zo veel als je wilt om de rijen te filteren voor het bijwerken naar wat je nodig hebt.

Wat gebeurt er nu als u rijen in de ene tabel wilt bijwerken op basis van de toestand van een andere tabel? Deze vraag leidt tot een aantal verschillende manieren waarop u dit kunt doen.

Sinds de WHERE clausule kan elke geldige uitdrukking bevatten, u zou een subquery kunnen gebruiken:

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

U kunt ook een subquery gebruiken in de SET gedeelte van de instructie als u de kolom wilt instellen op een waarde in een andere tabel

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

Misschien is een gemakkelijkere manier om meerdere tabellen op te geven na de UPDATE clausule. Alleen de SET expression zal updates uitvoeren, maar door extra tabellen te vermelden, kunnen de tabellen worden opgenomen.

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

Net als bij het uitbreiden van de WHERE clausule, kan het aantal tafels worden uitgebreid om alle tafels op te nemen die je nodig hebt als je meerdere tafels hebt waaraan je moet deelnemen.


  1. Identiteitstoename springt in SQL Server-database

  2. Voorbeeld van het gebruik van bind_result versus get_result

  3. Fout bij het ophalen van tekst voor fout ORA-01804

  4. Installeer MariaDB op een Mac