I'd like to put a constraint, a check or a foreign key, on two combined fields from table1 to another field in table2. Here is what I tried, but both gave me errors:
ALTER TABLE table1
ADD CONSTRAINT foo CHECK (field1 || field2 IN (SELECT fieldx FROM table2));
ALTER TABLE table1
ADD CONSTRAINT foo FOREIGN KEY (field1 || field2) REFERENCES table2 (fieldx);
Is this possible? If yes, how? Beside this, is it generally possible to use subselects in CHECK Constraints?
I'm using DB2/LINUX 9.5.0.
Solution:
It seems to be only possible with an extra column, that holds the combinied value. The good thing is, Tony Andrews pointed out, there is a way to create expression generated columns in DB2.
CREATE TABLE table1 (
field1 CHARACTER(5),
field2 CHARACTER(5),
fieldx CHARACTER(10) GENERATED ALWAYS AS (field1) || field2),
CONSTRAINT FK_X FOREIGN KEY (fieldx) REFERENCES table2 (fieldx)
);