|
| join/subselect problem Fra : Trine Banke Brennech~ |
Dato : 16-04-03 21:42 |
|
Hej
Jeg har et SQL-spørgsmål. Jeg har prøvet adskillige joins og subselects, men
kan ikke finde en løsning på følgende problem:
Jeg har 4 tabeller:
t1, t2, t3, t4
primærnøglen i t1, pkey kan findes som fremmednøgle i ingen, een eller flere
af de tre andre tabeller.
Jeg vil finde de forekomster i t1, som ikke er repræsenteret som
fremmednøgle i een eneste af de tre andre tabeller. Hvordan gør jeg det?
PS: Jeg bruger Firebird-databasen
Håber I kan hjælpe
Mvh Trine Banke Brenneche
| |
Ole Nielsby (17-04-2003)
| Kommentar Fra : Ole Nielsby |
Dato : 17-04-03 00:00 |
|
Trine Banke Brenneche <nyhed@brenneche.dk> skrev:
> Jeg vil finde de forekomster i t1, som ikke er repræsenteret som
> fremmednøgle i een eneste af de tre andre tabeller. Hvordan gør jeg det?
>
> PS: Jeg bruger Firebird-databasen
Kender ikke Firebird - men mon ikke den har en
exists(subquery) -funktion?
Hvis den ikke har subqueries, kan du måske klare den ved at
kombinere group by på felterne i t1 med outer left join og count
på de andre tabeller.
ON/Fjern sneglen fra min svaradresse
| |
Trine Banke Brennech~ (17-04-2003)
| Kommentar Fra : Trine Banke Brennech~ |
Dato : 17-04-03 09:59 |
|
"Ole Nielsby" <ole.nielsby@snailmail.dk> skrev
> Kender ikke Firebird - men mon ikke den har en
> exists(subquery) -funktion?
Det har den - men mit problem er vist, at jeg ikke er særlig god til
subqueries... ligegyldigt hvordan jeg laver denne forespørgsel returnerer
den enten _alle_ forekomster i t1 eller NULL.... og med de testdata, jeg har
lavet skulle den helst bare resultere een række. Så det, jeg spørger om, er
vel nærmest en lille smule begynder-subselect-hjælp....
Herunder kan I se, hvad jeg bla. har forsøgt mig med - nu ikke grine!
select pkey from t1 where not exists
(select t2.pkey from t1,t2 where t1.pkey = t2.pkey)
and not exists
(select t3.pkey from t1,t3 where t1.pkey = t3.pkey)
and not exists
(select t4.pkey from t1,t4 where t1.pkey = t4.pkey);
Mvh Trine Brenneche
| |
Nis Jorgensen (17-04-2003)
| Kommentar Fra : Nis Jorgensen |
Dato : 17-04-03 11:09 |
|
On Wed, 16 Apr 2003 22:41:34 +0200, "Trine Banke Brenneche"
<nyhed@brenneche.dk> wrote:
>Jeg har et SQL-spørgsmål. Jeg har prøvet adskillige joins og subselects, men
>kan ikke finde en løsning på følgende problem:
>
>Jeg har 4 tabeller:
>t1, t2, t3, t4
>primærnøglen i t1, pkey kan findes som fremmednøgle i ingen, een eller flere
>af de tre andre tabeller.
>Jeg vil finde de forekomster i t1, som ikke er repræsenteret som
>fremmednøgle i een eneste af de tre andre tabeller. Hvordan gør jeg det?
SELECT pkey FROM t1
EXCEPT
(SELECT pkey FROM t2
UNION
SELECT pkey FROM t3
UNION
SELECT pkey FROM t4)
--
Nis Jørgensen
Amsterdam
Please include only relevant quotes, and reply below the quoted text. Thanks
| |
Trine Banke Brennech~ (17-04-2003)
| Kommentar Fra : Trine Banke Brennech~ |
Dato : 17-04-03 11:40 |
|
"Nis Jorgensen" <nis@dkik.dk> skrev i en meddelelse
news:35vs9vgcbs996f79ng7b7o2qo1l948d7eb@4ax.com...
>
> SELECT pkey FROM t1
> EXCEPT
> (SELECT pkey FROM t2
> UNION
> SELECT pkey FROM t3
> UNION
> SELECT pkey FROM t4)
Firebird kender åbenbart ikke except :(
Men tak for forsøget.
Mvh Trine Brenneche
| |
Trine Banke Brennech~ (17-04-2003)
| Kommentar Fra : Trine Banke Brennech~ |
Dato : 17-04-03 11:08 |
|
"Trine Banke Brenneche" <nyhed@brenneche.dk> skrev i en meddelelse
news:3e9dc03c$0$244$edfadb0f@dread15.news.tele.dk...
> Hej
> Jeg har et SQL-spørgsmål. Jeg har prøvet adskillige joins og subselects,
men
> kan ikke finde en løsning på følgende problem:
Jeg har i øvrigt også prøvet
select pkey from t1 where not exists
(select pkey from t2
union
select pkey from t3
union
select pkey from t4);
Selve subselecten virker fint alene, men når den er en subselect får jeg at
vide, at der er fejl omkring "union" - kan det passe, at Firebird ikke kan
finde ud af union i en subselect? Derudover skal jeg måske senere have det
hele flyttet til postgres - kan den så godt union i en subselect?
Mvh Trine Brenneche
| |
Nis Jorgensen (17-04-2003)
| Kommentar Fra : Nis Jorgensen |
Dato : 17-04-03 12:33 |
|
On Thu, 17 Apr 2003 12:07:42 +0200, "Trine Banke Brenneche"
<nyhed@brenneche.dk> wrote:
>
>"Trine Banke Brenneche" <nyhed@brenneche.dk> skrev i en meddelelse
>news:3e9dc03c$0$244$edfadb0f@dread15.news.tele.dk...
>> Hej
>> Jeg har et SQL-spørgsmål. Jeg har prøvet adskillige joins og subselects,
>men
>> kan ikke finde en løsning på følgende problem:
>
>Jeg har i øvrigt også prøvet
>
>select pkey from t1 where not exists
>(select pkey from t2
>union
>select pkey from t3
>union
>select pkey from t4);
Det burde virke
>Selve subselecten virker fint alene, men når den er en subselect får jeg at
>vide, at der er fejl omkring "union" - kan det passe, at Firebird ikke kan
>finde ud af union i en subselect?
Det lyder ikke usandsynligt - omend jeg ellers har hørt gode ting om
Interbase/Firebird's SQL-understøttelse.
> Derudover skal jeg måske senere have det
>hele flyttet til postgres - kan den så godt union i en subselect?
Ja.
Hvis ingen af de angivne metoder virker, burde denne kunne gøre det:
select pkey from t1 where not exists
(select t2.pkey from t2 where t1.pkey = t2.pkey)
and not exists
(select t3.pkey from t3 where t1.pkey = t3.pkey)
and not exists
(select t4.pkey from t4 where t1.pkey = t4.pkey);
--
Nis Jørgensen
Amsterdam
Please include only relevant quotes, and reply below the quoted text. Thanks
| |
Trine Banke Brennech~ (17-04-2003)
| Kommentar Fra : Trine Banke Brennech~ |
Dato : 17-04-03 13:29 |
|
"Nis Jorgensen" <nis@dkik.dk> skrev i en meddelelse
news:0qvs9v4s507gr8njf4k64camuf52lv7vuk@4ax.com...
> select pkey from t1 where not exists
> (select t2.pkey from t2 where t1.pkey = t2.pkey)
> and not exists
> (select t3.pkey from t3 where t1.pkey = t3.pkey)
> and not exists
> (select t4.pkey from t4 where t1.pkey = t4.pkey);
Jeg var ganske sikker på, at jeg _havde_ prøvet denne løsning... men
åbenbart ikke. Nu virker det som det skal.
1000 tak for hjælpen
Med venlig hilsen
Trine Brenneche
| |
|
|