PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Batasan NOT NULL pada sekumpulan kolom

@Igor benar dan beberapa OR ekspresi 'ed cepat dan sederhana.

Untuk daftar panjang kolom (a , b , c , d , e , f , g dalam contoh), ini lebih pendek dan sama cepatnya:

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

db<>main biola di sini
Fiddle SQL Lama.

Bagaimana cara kerjanya?

Bentuk yang lebih verbose dari di atas adalah:

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

ROW adalah sintaks yang berlebihan di sini.

Menguji ROW ekspresi dengan IS NULL hanya melaporkan TRUE if setiap kolom adalah NULL - yang kebetulan persis seperti yang ingin kami kecualikan.

Ekspresi ini tidak mungkin dibalik begitu saja dengan (a,b,c,d,e,f,g) IS NOT NULL , karena itu akan menguji bahwa setiap kolom IS NOT NULL . Sebagai gantinya, hilangkan seluruh ekspresi dengan NOT . Voila.

Detail lebih lanjut dalam manual di sini dan di sini.

Ekspresi bentuk:

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

akan mencapai hal yang sama, kurang elegan dan dengan batasan utama:hanya berfungsi untuk kolom tipe data yang cocok , sedangkan centang pada ROW ekspresi bekerja dengan apa saja kolom.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak ada fungsi yang cocok dengan nama dan tipe argumen yang diberikan

  2. PILIH atau MASUKKAN satu baris dalam satu perintah

  3. Kolom Postgres tidak ada

  4. Cara terbaik untuk mendapatkan jumlah hasil sebelum LIMIT diterapkan

  5. tidak bisa membuat sisipan PostgreSQL sederhana berfungsi