/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
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



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste