/ 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
Max 1 relateret post
Fra : Mads Lie Jensen


Dato : 13-06-05 19:15

Hej

Jeg har en tabel (i en postgreSQL 8.0.3-database) 'planter':

id integer primary key
navn varchar

og en tabel 'plantebilleder':

id integer primary key
plante_id integer
filnavn varchar(50)

Hver plante i 'planter' kan have 0 eller flere billeder tilknyttet.

Jeg vil nu gerne hente alle planter ud fra planter og have højst et
filnavn med. Jeg har leget lidt med:

select plantenavn, filnavn from planter left join plantebilleder on
planter.id = plantebilleder.plante_id

Men hvis en plante så har mange billeder, så får jeg alle billederne med
- jeg vil kun have et enkelt ..... (eller plantens navn uden billede,
hvis den ikke har et billede)

Jeg kan ikke helt gennemskue hvordan det skal gøres


--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - snart i ny indpakning: http://ny.gartneriet.dk

 
 
Stig H. Jacobsen (14-06-2005)
Kommentar
Fra : Stig H. Jacobsen


Dato : 14-06-05 16:06

On Mon, 13 Jun 2005 20:15:14 +0200, Mads Lie Jensen <mads@gartneriet.dk> wrote:

> Men hvis en plante så har mange billeder, så får jeg alle billederne med
> - jeg vil kun have et enkelt ..... (eller plantens navn uden billede,
> hvis den ikke har et billede)

En sub-select burde kunne gøre det - alle planterne og et enkelt
billede fra hver:

SELECT id,
navn,
(SELECT pb.filnavn
FROM plantebilleder pb
WHERE pb.plante_id = planter.id
ORDER BY 1
LIMIT 1
) AS "filnavn"
FROM planter;

Du får NULL som filnavn for planter, hvor der ingen billeder er.

Jeg har ikke prøvet eller syntaxchecket det, men lad mig vide om
det virker.

--
Stig

Mads Lie Jensen (14-06-2005)
Kommentar
Fra : Mads Lie Jensen


Dato : 14-06-05 22:16

On Tue, 14 Jun 2005 15:05:57 +0000 (UTC), "Stig H. Jacobsen"
<stighj-at-googles-mail@nospam.invalid> wrote:

>> Men hvis en plante så har mange billeder, så får jeg alle billederne med
>> - jeg vil kun have et enkelt ..... (eller plantens navn uden billede,
>> hvis den ikke har et billede)
>
>En sub-select burde kunne gøre det - alle planterne og et enkelt
>billede fra hver:
>
>SELECT id,
> navn,
> (SELECT pb.filnavn
> FROM plantebilleder pb
> WHERE pb.plante_id = planter.id
> ORDER BY 1
> LIMIT 1
> ) AS "filnavn"
> FROM planter;
>
>Du får NULL som filnavn for planter, hvor der ingen billeder er.
>
>Jeg har ikke prøvet eller syntaxchecket det, men lad mig vide om
>det virker.

Det virker som det skal - tak for det

Jeg havde selv fundet frem til:

SELECT DISTINCT ON (planter.id) planter.id, planter.navn
billeder.filnavn FROM planter LEFT JOIN ( SELECT billeder.filnavn FROM
billeder ) AS billeder ON planter.id = billeder.plante_id;

som også lader til at virke. Men dit forslag virker noget pænere så det
vil jeg tage til mig

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - snart i ny indpakning: http://ny.gartneriet.dk

Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408188
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste