sql >> Databáze >  >> RDS >> PostgreSQL

NOT NULL omezení přes sadu sloupců

@Igor má docela pravdu a pár OR 'ed expression jsou rychlé a jednoduché.

Pro dlouhý seznam sloupců (a , b , c , d , e , f , g v příkladu) je kratší a stejně rychlý:

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

db<>zde hrajte
Staré SQL Fiddle.

Jak to funguje?

Podrobnější forma výše uvedeného by byla:

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

ROW je zde nadbytečná syntaxe.

Testování ROW výraz s IS NULL pouze hlásí TRUE pokud každý sloupec je NULL - což je náhodou přesně to, co chceme vyloučit.

Není možné jednoduše obrátit tento výraz pomocí (a,b,c,d,e,f,g) IS NOT NULL , protože by to otestovalo, že každý jednotlivý sloupec IS NOT NULL . Místo toho negujte celý výraz pomocí NOT . Voilá.

Více podrobností v návodu zde a zde.

Výraz ve tvaru:

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

by dosáhlo stejného, ​​méně elegantně a s velkým omezením:funguje pouze pro sloupce odpovídajícího datového typu , zatímco zaškrtnete ROW výraz funguje s jakýmkoli sloupce.



  1. SQL NOT Operátor pro začátečníky

  2. Připojujete se k MS SQL Server s ověřováním Windows pomocí Pythonu?

  3. Rozdíly mezi utf8 a latin1

  4. Nahradit řetězec MySQL