Avatar billede sf Nybegynder
25. marts 2008 - 12:42 Der er 12 kommentarer og
1 løsning

join 2 tabeller med kun et resultat fra første tabel

jeg har disse 2 tabeller:

a:

id, navn
1, test1
2, test2
3, test3

b:
id,aID,navn
1,1,testB1
2,2,testB2
3,2,testB3

det jeg faktisk bare vil er at vide om der er ongle resultater i tabel b der passer til a på aID.

så vil gerne have dette resultat:

id, navn
1, test1,ja
2, test2,ja
3, test3,nej

men jeg får dette:

id, navn
1, test1,ja
2, test2,ja
2,test2,ja
3, test3,nej
Avatar billede ramad Praktikant
25. marts 2008 - 12:55 #1
Må man se den kode du har brugt, så er det lidt lettere lige at rette til det du allerede har dannet.
Avatar billede sf Nybegynder
25. marts 2008 - 13:01 #2
SELECT top 100 a.id,a.navn, case if b.id =0 then 'block' else 'none' end FROM a LEFT JOIN b ON (a.ID = b.aib) ORDER BY a.navn
Avatar billede ramad Praktikant
25. marts 2008 - 13:10 #3
Hvad hvis du laver følgende
SELECT DISTINCT    a.id,
            a.navn
                //den kode du sætter dit block/none med
FROM a INNER JOIN b ON (a.ID = b.aid) ORDER BY a.navn

Altså anvender distinct på dit id og et inner join i stedet for left join?
Avatar billede ramad Praktikant
25. marts 2008 - 13:11 #4
orv jeg overså lige at du ville have 3'eren med - så virker det ovenstående ikke.
Avatar billede ramad Praktikant
25. marts 2008 - 13:12 #5
Så stadig en Distinct, men tilbage til dit LEFT join - altså:

SELECT DISTINCT
  a.id,
  a.navn
  //den kode du sætter dit block/none med
FROM
  a LEFT JOIN b ON
    (a.ID = b.aid)
ORDER BY a.navn
Avatar billede sf Nybegynder
25. marts 2008 - 13:52 #6
den fortæller mig jeg ikke kan bruge DISTINCT pga. jeg henter nogle tekst felter
Avatar billede arne_v Ekspert
25. marts 2008 - 14:02 #7
Virker:

SELECT a.id,a.navn,EXISTS(SELECT * FROM b WHERE b.aid=a.id)
FROM a

?
Avatar billede sf Nybegynder
25. marts 2008 - 14:28 #8
kan kun få EXISTS til at ligge under where
Avatar billede arne_v Ekspert
25. marts 2008 - 14:36 #9
hvad med:

SELECT a.id,a.navn,(SELECT COUNT(*)>0 FROM b WHERE b.aid=a.id)
FROM a
Avatar billede kalp Novice
25. marts 2008 - 14:50 #10
SELECT top 100 a.id,a.navn, case if b.id =0 then 'block' else 'none' end FROM a LEFT JOIN b ON (a.ID = b.aib) group by a.id,a.navn ORDER BY a.navn

medmindre man ikke kan pga. din case if.. det har jeg ikke testet.
Avatar billede sf Nybegynder
25. marts 2008 - 15:05 #11
tak arne fik lavet den om til:
SELECT a.id,a.navn,(SELECT DISTINCT(*)>0 FROM b WHERE b.aid=a.id)
FROM a

og så køre det.. lav lige svar :)
Avatar billede sf Nybegynder
25. marts 2008 - 15:06 #12
tak for hjælpen alle
Avatar billede arne_v Ekspert
25. marts 2008 - 15:19 #13
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester