Subject | RE: [firebird-support] Re: Help with SQL |
---|---|
Author | Cao Ancoinc |
Post date | 2005-02-25T15:59:30Z |
Thank you Adam
-----Original Message-----
From: Adam [mailto:s3057043@...]
Sent: 25 February 2005 03:10
To: firebird-support@yahoogroups.com
Subject: [firebird-support] Re: Help with SQL
Hi Cao,
Why do you need it done in the same statement? Any queries run within
the same transaction do not see any changes in the table after that
transaction was started, except the ones made in this transaction.
So:
Insert into TableA(Key, ColA,ColB)
Select TableB.Key,TableB.ColA, TableB.ColB from TableB
WHERE not exists (select * from TableA
where TableA.Key = TableB.Key);
Update TableB
set posted = 'T'
where posted <> 'T';
would be a safe query to run.
If it truly bothered you, you could put the combination into a stored
procedure, however I find your first query odd. If you have a field
in tableB to say whether it has been posted or not, why do you rely
on the not exists? Wouldn't the following be more efficient?
Insert into TableA(Key, ColA,ColB)
Select TableB.Key,TableB.ColA, TableB.ColB from TableB
where posted <> 'T';
Update TableB
set posted = 'T'
where posted <> 'T';
Or as a stored procedure, you could run:
for select TableB.Key,TableB.ColA, TableB.ColB from TableB
where posted <> 'T'
into :tablebkey, :tablebcola, :tablebcolb
do
begin
Insert into TableA(Key, ColA,ColB) values
(:tablebkey, :tablebcola, :tablebcolb);
Update tableb
set posted = 'T'
where key = :tablebkey;
end
Unless you really want to reduce it to a single operation, I wouldn't
bother creating the stored procedure though.
Adam
--- In firebird-support@yahoogroups.com, "Cao Ancoinc" <groups@a...>
wrote:
ADVERTISEMENT
----------------------------------------------------------------------------
--
Yahoo! Groups Links
a.. To visit your group on the web, go to:
http://groups.yahoo.com/group/firebird-support/
b.. To unsubscribe from this group, send an email to:
firebird-support-unsubscribe@yahoogroups.com
c.. Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
[Non-text portions of this message have been removed]
-----Original Message-----
From: Adam [mailto:s3057043@...]
Sent: 25 February 2005 03:10
To: firebird-support@yahoogroups.com
Subject: [firebird-support] Re: Help with SQL
Hi Cao,
Why do you need it done in the same statement? Any queries run within
the same transaction do not see any changes in the table after that
transaction was started, except the ones made in this transaction.
So:
Insert into TableA(Key, ColA,ColB)
Select TableB.Key,TableB.ColA, TableB.ColB from TableB
WHERE not exists (select * from TableA
where TableA.Key = TableB.Key);
Update TableB
set posted = 'T'
where posted <> 'T';
would be a safe query to run.
If it truly bothered you, you could put the combination into a stored
procedure, however I find your first query odd. If you have a field
in tableB to say whether it has been posted or not, why do you rely
on the not exists? Wouldn't the following be more efficient?
Insert into TableA(Key, ColA,ColB)
Select TableB.Key,TableB.ColA, TableB.ColB from TableB
where posted <> 'T';
Update TableB
set posted = 'T'
where posted <> 'T';
Or as a stored procedure, you could run:
for select TableB.Key,TableB.ColA, TableB.ColB from TableB
where posted <> 'T'
into :tablebkey, :tablebcola, :tablebcolb
do
begin
Insert into TableA(Key, ColA,ColB) values
(:tablebkey, :tablebcola, :tablebcolb);
Update tableb
set posted = 'T'
where key = :tablebkey;
end
Unless you really want to reduce it to a single operation, I wouldn't
bother creating the stored procedure though.
Adam
--- In firebird-support@yahoogroups.com, "Cao Ancoinc" <groups@a...>
wrote:
> Hi everyonePosted
>
> I would like to insert records from table B into Table A where
> the record does not exist in Table A and mark the record in
> table B as posted
>
> eg
> Table A Table B
> Key ColA ColB ColC Key ColA ColB
> === === ==== ==== === === ==========
> A 1 11 111 B 2B 22BPosted
> B 2 22 222 D 4D 44D
> C 3 33 333 E 5E 55E
>
>
>
> Result
> Table A Table B
> Key ColA ColB ColC Key ColA ColB
> === === ==== ==== === === ==========
> A 1 11 111 B 2B 22BYahoo! Groups Sponsor
> B 2 22 222 D 4D 44D True
> C 3 33 333 E 5E 55E True
> D 4D 44D
> E 5E 55E
>
>
> I have used the following sql
> Insert into TableA(Key, ColA,ColB)
> Select TableB.Key,TableB.ColA, TableB.ColB from TableB
> WHERE not exists (select * from TableA
> where TableA.Key = TableB.Key);
>
> How do I mark the record as posted in TableB using the same sql
>
> I would appreciate any help from the gurus out there
>
> Regards Cao
ADVERTISEMENT
----------------------------------------------------------------------------
--
Yahoo! Groups Links
a.. To visit your group on the web, go to:
http://groups.yahoo.com/group/firebird-support/
b.. To unsubscribe from this group, send an email to:
firebird-support-unsubscribe@yahoogroups.com
c.. Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
[Non-text portions of this message have been removed]