I am using PostgreSQL and have two tables:
Table_A
colA | colB | colC | colD | colE | colF | colG | colH | colI | colJ
Table_B
colA | colB | colC | columnD | colE | columnF | colG | colH | colI | colJ
I am trying to insert a number of rows from table_B
into table_A
. My problem is that Table_A
has a primary key based on colA, colB, colC, colD, and colE
. Table_B
does not have this restriction, which means a simple insert
won't work:
INSERT INTO Table_A (colA, colB, colC, colD, colE, colF, colG, colH, colI, colJ)
SELECT colA, colB, colC, columnD, colE, columnF, colG, colH, colI, colJ FROM Table_B;
I am trying to work around this by using DISTINCT
in my selection from Table_B
. However, I cannot determine the correct syntax to both select distinct
on the 5 primary key columns used in Table_A
, and select all ten columns to be inserted. I have tried
INSERT INTO Table_A (colA, colB, colC, colD, colE)
SELECT DISTINCT colA, colB, colC, columnD, colE FROM Table_B;
Which correctly pulls unique entries but does not populate columns F-J, and I have tried
INSERT INTO Table_A (colA, colB, colC, colD, colE, colF, colG, colH, colI, colJ)
SELECT DISTINCT(colA, colB, colC, columnD, colE) colA, colB, colC, columnD, colE, columnF, colG, colH, colI, colJ FROM Table_B;
But this fails, as the first column entry is a wrapped version of the 5 unique columns, and fails the insert due to column length restrictions - the SELECT DISTINCT
in parens returns '' which obviously doesn't fit:
ERROR: Value is too long for type character varying(12)
My goal would be form a query which gets all the unique combinations of colA, colB, colC, columnD, colE
from Table_B
, and inserts those full rows, including columnF, colG, colH, colI, colJ
into Table_A
.