Re: [SQL] Re: Another nut to crack with insertion into tables... *sigh*

From: Herouth Maoz <herouth(at)oumail(dot)openu(dot)ac(dot)il>
To: pgsql-sql(at)hub(dot)org
Subject: Re: [SQL] Re: Another nut to crack with insertion into tables... *sigh*
Date: 1998-09-28 16:20:54
Message-ID: l0311070ab23566f0a90d@[147.233.159.109]
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

At 16:02 +0200 on 28/9/98, Tom Lane wrote:

>
> I believe sub-selects are currently only supported in WHERE clauses.
> Supporting them elsewhere is on the TODO list for a future release
> (no, 6.4 won't have it). In the meantime you'll have to read back
> the result of the sub-select and include it in the text of the INSERT.
>
> (I'm not sure whether the SQL spec allows a select in an INSERT like this
> anyway. What happens if the sub-select returns no tuples, or more than
> one tuple?)

First, there is an exception which is supposed to be thrown in such a case.

But anyway, there is no reason to do things like this. Read the "insert"
manpage. The syntax is:

insert into classname
[(att.expr-1 [,att_expr.i] )]
{values (expression1 [,expression-i] ) |
select expression1 [,expression-i]
[from from-list] [where qual]

So, you should format your insert like this:

INSERT INTO my_table
(int_field, text_field, another_int_field, another_text_field )
SELECT 15, 'The Wind in the Willows', foreign_int_field, foreign_text_field
FROM foreign_table
WHERE ...

Everything which you want inserted literally, you put as constants on the
select list. It's a valid expression. Anything you want from the other
table (or tables!), you mention by its field name.

Very simple, and has been working for ages.

Herouth

--
Herouth Maoz, Internet developer.
Open University of Israel - Telem project
http://telem.openu.ac.il/~herutma

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Glenn Sullivan 1998-09-29 17:05:34 Getting datatype before SELECT
Previous Message Bryan White 1998-09-28 14:50:27 Setting current time on insert