Re: INSERT WITH SELECT help - Mailing list pgsql-general

From ozric
Subject Re: INSERT WITH SELECT help
Date
Msg-id 39298285.5B5D4890@tampabay.rr.com
Whole thread Raw
In response to INSERT WITH SELECT help  (Richard Smith <ozric@tampabay.rr.com>)
List 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@glo.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

pgsql-general by date:

Previous
From: "Ragnar Hakonarson"
Date:
Subject: plperl difficulties
Next
From: "Bryan White"
Date:
Subject: Database is unstable after upgrade