PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Ràng buộc NOT NULL trên một tập hợp các cột

@Igor khá đúng và một vài OR 'ed biểu thức rất nhanh và đơn giản.

Để có một danh sách dài các cột (a , b , c , d , e , f , g trong ví dụ), điều này ngắn hơn và nhanh như sau:

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

db <> fiddle here
SQL Fiddle cũ.

Nó hoạt động như thế nào?

Một dạng chi tiết hơn ở trên sẽ là:

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

ROW là cú pháp thừa ở đây.

Kiểm tra ROW biểu thức với IS NULL chỉ báo cáo TRUE nếu mọi cột đơn lẻ NULL - đó là chính xác những gì chúng tôi muốn loại trừ.

Không thể đơn giản đảo ngược biểu thức này với (a,b,c,d,e,f,g) IS NOT NULL , vì điều đó sẽ kiểm tra rằng mọi cột duy nhất IS NOT NULL . Thay vào đó, hãy phủ định toàn bộ biểu thức bằng NOT . Voilá.

Thêm chi tiết trong sách hướng dẫn tại đây và tại đây.

Biểu thức của biểu mẫu:

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

sẽ đạt được điều tương tự, ít thanh lịch hơn và có một hạn chế lớn:chỉ hoạt động cho các cột của loại dữ liệu phù hợp , trong khi kiểm tra một ROW biểu thức hoạt động với bất kỳ cột.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PGTune Alternatives - ClusterControl PostgreSQL Configuration

  2. Chọn ba giá trị hàng đầu trong mỗi nhóm

  3. Các cài đặt sẵn có cao của PostgreSQL Patroni

  4. Lỗi PostgreSQL khi cố gắng tạo tiện ích mở rộng

  5. xây dựng truy vấn động SQL với thư viện python psycopg2 và sử dụng các công cụ loại chuyển đổi tốt