sql >> Database >  >> RDS >> PostgreSQL

NOT NULL beperking over een set kolommen

@Igor heeft helemaal gelijk en een paar OR 'ed expressie zijn snel en eenvoudig.

Voor een lange lijst met kolommen (a , b , c , d , e , f , g in het voorbeeld), is dit korter en net zo snel:

CHECK (NOT (a,b,c,d,e,f,g) IS NULL)

db<>viool hier
Oude SQL Fiddle.

Hoe werkt het?

Een meer uitgebreide vorm van het bovenstaande zou zijn:

CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)

ROW is hier overbodige syntaxis.

Een ROW testen uitdrukking met IS NULL alleen meldt TRUE als elke kolom is NULL - wat precies is wat we willen uitsluiten.

Het is niet mogelijk om deze uitdrukking eenvoudig om te keren met (a,b,c,d,e,f,g) IS NOT NULL , omdat dat zou testen dat elke afzonderlijke kolom IS NOT NULL . Negeer in plaats daarvan de hele uitdrukking met NOT . Voilá.

Meer details in de handleiding hier en hier.

Een uitdrukking van de vorm:

CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)

zou hetzelfde bereiken, minder elegant en met een grote beperking:werkt alleen voor kolommen van overeenkomend gegevenstype , terwijl de controle op een ROW expressie werkt met elke kolommen.



  1. Er is een netwerkgerelateerde of instantiespecifieke fout opgetreden bij het tot stand brengen van een verbinding met SQL Server

  2. TEMPFILE Offline fysieke stand-by

  3. Wat betekent SQL Select-symbool || gemeen?

  4. Een Access-database bouwen in de cloud