[Info-Ingres] Ambiguous replace?

simonl at unwired.com.au simonl at unwired.com.au
Thu Apr 12 01:38:01 CDT 2007


On Apr 11, 7:30 pm, "Tim Ellis" <tell... at csc.com> wrote:
> On Apr 6, 5:33 pm, iinu... at yahoo.com wrote:
>
>
>
> > On Apr 6, 6:17 am, "Tim Ellis" <tell... at csc.com> wrote:
>
> > > If I run the following bit of SQL
> > >     Select * from View_A a, View_B b
> > >     where a.Column_2 = b.Column_2
> > >          and a.column_3 = b.column_3
> > >          and a.column_2 like 'Q%'
> > >          and b.column_2 like 'Q%'
>
> > > then I get back two rows - They have the same value for column_1 but
> > > different values for
> > > column_3 and  View_B.Column_1
> > > However if I run
>
> > >     Update VIew_A a from view B b
> > >     Set Column_1 = b.Column_1
> > >     where a.Column_2 = b.Column_2
> > >          and a.column_3 = b.column_3
> > >          and a.column_2 like 'Q%'
> > >          and b.column_2 like 'Q%'
>
> > > I get:-
> > > E_US125D Ambiguous replace: you have specified several
> > > replacements for the same row.
>
> > > Surely if I had several replacements for the same row I would see this
> > > in the original select.
>
> > This is just straightforward SQL.
>
> > According to your statements, the original select gives you two rows
> > with same View_A.Column_1, and differing Column_3 and
> > View_B.Column_1.  So, when you go ahead and try to do an Update table
> > A, Ingres finds that there are two matching rows and does not know
> > which one to use as the new value to update in View_A.
>
> Either I didn't clearly explain, or you didn't follow - The values of
> Column_3 are distinct
>
> Table_A
> Column_1   Column_2   Column_3
> "   "             "Q1234"     13590
> "   "             "Q1234"     66000
>
> Table_B
> Column_1   Column_2   Column_3
> "69804"      "Q1234"     13590
> "86592"      "Q1234"     66000
>
>     Select * from View_A a, View_B b
>     where a.Column_2 = b.Column_2
>          and a.column_3 = b.column_3
>          and a.column_2 like 'Q%'
>          and b.column_2 like 'Q%'
>
> gives 2 rows
>
>     Update VIew_A a from view B b
>     Set Column_1 = b.Column_1
>     where a.Column_2 = b.Column_2
>          and a.column_3 = b.column_3
>          and a.column_2 like 'Q%'
>          and b.column_2 like 'Q%'
>
> E_US125D Ambiguous replace: you have specified several replacements
> for  the same row.- Hide quoted text -
>
> - Show quoted text -

You can find the errant rows with:
select a.column_2, a.column_3, count(*)
from view_a a, view_b b
where a.Column_2 = b.Column_2
and a.column_3 = b.column_3
and a.column_2 like 'Q%'
and b.column_2 like 'Q%'
group by a.column_2, a.column_3
having count(*) > 1

If it is truly working as you describe then that would be a bug!  Log
a support issue.  They will want a test case (i.e. copydb output &
data) to support your accusation.  Or you could try and work around it
by removing the views from the SQL.



More information about the Info-Ingres mailing list