| -- PMS60019.SQL
-- Script to demonstrate problem apparently introduced by version 6.1 of Rdb.
-- Problem has been reproduced with 6.1-02, 6.1-04 and 6.1-10.
-- This is fixed again in 7.0-00.
-- Script defines a small DB, with one table and inserts some test data into it.
-- The problem select and a workarround appear at the end of the script.
--
discon all;
drop database filename pms60019.rdb;
create database filename pms60019.rdb;
create domain PLANTYPENR
INTEGER;
comment on domain PLANTYPENR is ' identifikation af en planlaegningstype';
create domain PLANOMRNR
INTEGER;
comment on domain PLANOMRNR is
' entydig identifikation af et planlaegningsomraade';
create domain DISTRIKTSNR
INTEGER;
comment on domain DISTRIKTSNR is ' Distriktsnummer';
create table PLOMRTYDISTRIKT (
PLANTYPENR PLANTYPENR
default 0,
PLANOMRNR PLANOMRNR
default 0,
DISTRIKTSNR DISTRIKTSNR
default 0,
constraint CN_PLOMRTYDISTRIKT_PK
primary key (PLANTYPENR, PLANOMRNR, DISTRIKTSNR)
deferrable);
comment on table PLOMRTYDISTRIKT is
' sammenhaeng mellem planlaegningstyper og plomraader/distrikter';
create unique index PLOMRTYDISTRIKT_PLTYPE_IDX
on PLOMRTYDISTRIKT (
PLANTYPENR
asc,
DISTRIKTSNR
asc,
PLANOMRNR
asc)
type is SORTED
node size 1970
disable compression;
commit;
--
-- set up some data.
--
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (10,109,10100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (10,109,20100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (10,109,20500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (20,109,20100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (20,109,20500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (20,109,20700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (20,109,20800);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (30,109,20500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (30,109,20700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (30,109,20800);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (40,109,20100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (40,109,20500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (40,109,20700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (40,109,20800);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (50,109,21300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (50,109,21500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (50,109,21700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (60,109,20100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (60,109,20500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (60,109,20700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (60,109,20800);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (70,109,22300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (70,109,22500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (70,109,22700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (80,109,20700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (80,109,20800);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (90,109,20500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (90,109,20700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (90,109,20800);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (100,109,20500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (100,109,20700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (100,109,20800);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (110,109,20500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (110,109,20700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (110,109,20800);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (110,109,20900);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (10,132,14700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (10,132,15100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (20,132,10100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (20,132,14700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (20,132,15100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (30,132,10100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (30,132,14700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (30,132,15100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (40,132,15300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (50,132,15300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (50,132,15500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (50,132,15700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (60,132,15100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (60,132,15300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (70,132,16500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (70,132,16700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (70,132,16900);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (80,132,14700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (80,132,15100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (80,132,15300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (90,132,14700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (90,132,15100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (90,132,15300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (100,132,14700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (100,132,15100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (100,132,15300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (100,132,15500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (110,132,15300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (10,198,25100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (10,198,25300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (20,198,25300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (20,198,25500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (20,198,25700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (30,198,25300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (30,198,25500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (30,198,25700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (40,198,25100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (40,198,25300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (40,198,25500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (50,198,25100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (50,198,25300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (50,198,25500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (60,198,25300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (60,198,25500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (60,198,25700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (70,198,25500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (70,198,25700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (70,198,25900);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (80,198,25100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (80,198,25300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (80,198,25500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (90,198,25100);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (90,198,25300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (90,198,25500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (100,198,25300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (100,198,25500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (100,198,25700);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (110,198,25300);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (110,198,25500);
insert into plomrtydistrikt (PLANTYPENR, PLANOMRNR, DISTRIKTSNR) values (110,198,25700);
commit work;
set verify;
--
-- This does not work as we expect under 6.1, but was okay with 6.0.
--
select plantypenr, planomrnr, distriktsnr from plomrtydistrikt p1
where p1.distriktsnr in (select min(p2.distriktsnr) from plomrtydistrikt p2
where p1.plantypenr = p2.plantypenr and p1.planomrnr = p2.planomrnr)
and (planomrnr = 198)
order by planomrnr, plantypenr;
--
-- This does work and gives the expected results.
--
select plantypenr, planomrnr, distriktsnr from plomrtydistrikt p1
where p1.distriktsnr in (select min(p2.distriktsnr) from plomrtydistrikt p2
where p1.plantypenr = p2.plantypenr and p1.planomrnr = p2.planomrnr
and (planomrnr = 198))
order by planomrnr, plantypenr;
--
-- Goal is for each distinct pair of planomrnr and plantypenr we wish to
-- select the lowest distriktsnr.
--
|