How do I implement a sql command which outputs NULL for salary if it is a voluntary worker? Here are the tables I created first:
create Table worker (
pid integer references Person,
salary float);
create Table person(
pid integer primary key,
name varchar(30),
adress varchar(30));
Since I’m not sure how to distinguish a normal worker from a voluntary one, I decided to make another table. Unfortunately, I don’t know how to insert NULL values for salary for all voluntary workers. That is what I tried out:
create table voluntaryworker(
pid integer references Person,
salary = null);
insert into Person (pid, name, adress) values (1345, anna, 'festreet');
insert into voluntaryworker (pid, salary) values (1345, null);
pid = person ID
Advertisement
Answer
Like others commented, you certainly don’t need another table to implement this. All you need is some way to remember whether a worker is voluntary.
To make sure salary
sticks to your rule, you can add a CHECK
constraint:
CREATE TABLE worker (
pid integer PRIMARY KEY REFERENCES person
, voluntary boolean NOT NULL DEFAULT false
, salary numeric
, CONSTRAINT voluntary_has_no_salary CHECK (NOT voluntary OR salary IS NULL)
);
Meaning: voluntary workers cannot have a nonnull salary.
Alternatively, you might drop the table worker
, too, and just add the columns worker_salary
and worker_voluntary
to table person. (You may need an additional flag worker
, or integrate this information in the other two columns …)
If you are still interested in generated columns (not needed here), see this example with correct syntax and instructions:
Related: