Avatar billede sunlock Nybegynder
21. januar 2006 - 18:00 Der er 10 kommentarer og
1 løsning

SQL-join der driller

Jeg har 2 tabeller... Laver lige et eksempel:

medlems tabellen:
id|navn|...
1 | mig|...
2 | dig|...

arrangements tabellen:
id|kommer|...
1 | nej  |...

Så skal jeg have dem joinet, så jeg få dem som ikke findes i arrangements tabellen. Dvs hent alle fra medlem og sammenligne med arrangement (på id) for at finde dem som ikke kommer. Er i med?

Hvordan skal sådan en sql-streng se ud?
Avatar billede polle007 Nybegynder
21. januar 2006 - 18:20 #1
prøv med

select * from medlem, arrangement where medlem.id = arrangement.id and kommer = 'nej'
Avatar billede sunlock Nybegynder
21. januar 2006 - 18:22 #2
Det virker ikke - tror der skal bruges en join. Jeg kan bare ikke dreje den. Problemet er at jeg skal have dem som ENDNU IKKE har smidt sig i databasen... Altså, medlems tabellen indeholder ALLE medlemmer, mens id'et i arrangements tabellen kun indeholder id'et på dem som HAR svaret. Hvis du er med...
Avatar billede pidgeot Nybegynder
21. januar 2006 - 18:24 #3
Et bud:

select * from medlem, arrangement where (medlem.id = arrangement.id and kommer = 'nej') OR medlem.id NOT IN (SELECT arrangement.id FROM arrangement)
Avatar billede polle007 Nybegynder
21. januar 2006 - 18:24 #4
select * from medlem where id not in (select id from arrangement)

måske
Avatar billede sunlock Nybegynder
21. januar 2006 - 18:28 #5
Heller ikke rigtigt... Jeg vil også gerne undgå en sub-select, da jeg bruger mysql 4.1 på min server...
Avatar billede pidgeot Nybegynder
21. januar 2006 - 18:35 #6
Bare lige for en god ordens skyld - hvis vi går ud fra dit eksempel i spørgsmålet, præcist HVAD forventer du så at få tilbage? Det du skriver i din første kommentar passer ikke helt med det du skriver i spørgsmålet...
Avatar billede sunlock Nybegynder
21. januar 2006 - 18:38 #7
Hvis vi tager eksemplet så id = 2 med navn dig. Den figurer ikke i arrangements tabellen :-)
Avatar billede pidgeot Nybegynder
21. januar 2006 - 18:41 #8
Godt så - skal lige være sikker.

Hvorfor er det du ikke vil bruge en subselect? Hvis du har MySQL 4.1 er der da netop ingen problemer med det.

Men ellers, så prøv denne (skrevet ud fra http://dev.mysql.com/doc/refman/4.1/en/rewriting-subqueries.html):

SELECT medlem.* FROM medlem
  LEFT JOIN arrangement ON medlem.id=arrangement.id
  WHERE arrangement.id IS NULL;
Avatar billede sunlock Nybegynder
21. januar 2006 - 18:49 #9
Okay, vidste ikke at subqueries virkede fra 4.1 - troede det var fra 5.0... Umildbart ser den query ud til at virke, men jeg glemte lige at sige at der kan være flere arrangementer (hovsa?).

Dvs. jeg skal have en "AND arrangement_id = X" hvor X er et tal... Så den med IS NULL virker desværre ikke. Undskyld jeg ikke har været for god til at beskrive problemet (er temmelig træt nu...)
Avatar billede pidgeot Nybegynder
21. januar 2006 - 18:58 #10
I så fald kan du bruge SELECT * FROM medlem WHERE id NOT IN (SELECT id FROM arrangement WHERE arrangement_id = X) - hvor du så bare sætter dit arrangement-id ind i stedet for X.
Avatar billede sunlock Nybegynder
21. januar 2006 - 19:01 #11
Sweeeeeet... ved ikke hvor længe jeg har brugt på det :-)
TAKKER! :-)
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
Kurser inden for grundlæggende programmering

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