I have a mapping table that maps an int to a string for example
I have another table that references this one with a foreign key relationship
x
create table products (
product_name varchar (50),
color_id int,
constraint fk_products foreign key (color_id) references colors (color_id)
);
My question is the best way to get the color_id from the colors table when I am updating the products table – for example if I get a new product that is “red” and I want to enter that product into the product table with the color_id of 1.
The two ideas I have thought of are to
- do a select from the colors table to get the color_id for the color “red”. But I don’t like the idea of needing to run a select every time I update the products table
- hardcode the values in my code for the colors, but that seems very annoying from a maintenance perspective, because I would need to update the code every time a new color is added.
I am using postgres
Advertisement
Answer
You should look up the values. This is pretty easy in an insert. Something like:
insert into products p
select v.name, c.color_id
from (values ('name1', 'red'), ('name2, 'blue')) v(name, color) join
colors c
on c.color = v.color;
If you are concerned about performance, just be sure you have an index on colors(color)
.