Search Postgresql Archives

Re: Inserting multiple rows wtih a SELECt in the values clause

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>>>>> "stan" == stan  <stanb@xxxxxxxxx> writes:

 stan> I suspect this may be because the SELECT in the values clause
 stan> returns multiple rows?

Understand this: VALUES is really just a special form of SELECT that
returns only the specific rows that you tell it to construct. Every
single row returned by a VALUES clause is separately constructed.

i.e. VALUES (...),(...);  will return exactly two rows regardless of
what is inside the (...). VALUES (...);  is always exactly one row.
And so on.

The general form of INSERT is actually:

INSERT INTO table(columns) <query>

where <query> is any valid query returning any number of rows. The use
of VALUES for the <query> is just a convenient shorthand for cases where
the exact number of rows to be inserted, and their content, is known in
advance.

So, if you're inserting some set of rows generated from a query, the
word VALUES should not appear in the top-level statement. What you want
is:

INSERT INTO rate(employee_key, project_key, work_type_key, rate)
SELECT employee.employee_key,
       project.project_key,
       work_type.work_type_key,
       1 as rate
  FROM employee 
 CROSS JOIN project 
 CROSS JOIN work_type;

-- 
Andrew (irc:RhodiumToad)





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux