Re: INSERT WITH SELECT help

From: ozric <ozric(at)tampabay(dot)rr(dot)com>
To: Jurgen Defurne <defurnj(at)glo(dot)be>
Cc: postgreSQL general mailing list <pgsql-general(at)postgresql(dot)org>
Subject: Re: INSERT WITH SELECT help
Date: 2000-05-22 18:55:01
Message-ID: 39298285.5B5D4890@tampabay.rr.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Jurgen Defurne wrote:
>
> Richard Smith wrote:
>
> > I am new to SQL so bare with me here.
> >
> > I have set up a contact database. The PRIMANY KEY is person.per_id
> > All the other tables REFERENCE the person.per_id key. Now I want to be
> > able
> > to INSERT INTO the address table based on person.per_id by name without
> > having to know the value of person.per_id. Something like, I know this
> > does not work
> > but you will get the idea of what I need.
> >
> > INSERT INTO address
> > (per_id,street,city,state,zip)
> > VALUES ('('SELECT per_id FROM person WHERE first ='somename')','200 some
> > street',
> > 'Tampa','FL','33654');
> >
> > Can somthing like this be done ? Any help would be great.
>
> What you desire is very errorprone. Unless you have a program that does the
>
> things you want, user input is not reliable enough to use as the subselect
> you
> want here.
>
> Basically, what you are doing here is to check the input 'somename' against
>
> the database 'person'. Wouldn't it be better then, if you directly check
> your
> user input against your database, in which case you would have a valid
> 'per_id'
> or else you have to display a user error ?
>
> Should it be an automated system, then what you need is an expression.
> Since
> this may be a function, you can embed your subquery into a function, and
> rewrite the VALUES clause as :
> VALUES(select_function(), ....)
>
> Good luck.
>
> Jurgen Defurne
> defurnj(at)glo(dot)be

I got help from one of our DBA's today here is what I was missing. This
in not
in Bruce's Book.

INSERT INTO address (per_id,street_num,city,state,zip)
SELECT per_id,'$3','$4','$5','$6' FROM from person
WHERE last = '$1'
AND first = '$2';

$1-6 will be supplied by user input from Zope, I just wanted to isolate
the
per_id from person during and Insert so that end users would not need to
know
it was there. I know I might have a problem with getting more then one
return for
just first and last, I might add more WHERE statements in there. I am
just happy to get moving on with my little project.

Thanks for the help
Richad

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Chris Bitmead 2000-05-22 19:18:54 Re: [HACKERS] Postgresql OO Patch
Previous Message Ragnar Hakonarson 2000-05-22 18:54:59 plperl difficulties