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: