Avatar billede moreless Nybegynder
26. marts 2003 - 15:14 Der er 21 kommentarer og
1 løsning

query uden subselect

hej

Jeg skal bruge denne query:
SELECT * FROM bog WHERE id NOT IN (SELECT id FROM bruger)

Jeg kører MySQL 3.23.55 dvs. jeg ikke kan in "IN" så kan nogle hjælpe med at lave en query uden subselect?

/moreless
Avatar billede bearhugx Nybegynder
26. marts 2003 - 15:22 #1
Øhhh ... den query du kører - er det reelt, at den skal hente alle de bøger, som har en ID som ingen brugere har ???
Avatar billede moreless Nybegynder
26. marts 2003 - 15:23 #2
ja
Avatar billede bearhugx Nybegynder
26. marts 2003 - 15:30 #3
SELECT book.*
FROM Bog as book
LEFT JOIN Bruger as usr ON book.id=usr.id
WHERE usr.id = NULL

/Søren
Avatar billede bearhugx Nybegynder
26. marts 2003 - 15:30 #4
^svar^
Avatar billede moreless Nybegynder
26. marts 2003 - 15:36 #5
ehm, funker vist ikke helt

SELECT book.*
FROM bog as book
LEFT JOIN bruger as usr ON book.id=usr.id
WHERE usr.id = NULL

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in..
Avatar billede bearhugx Nybegynder
26. marts 2003 - 15:37 #6
evt. omskriv WHERE-sætningen til

WHERE usr.id IS NULL
Avatar billede moreless Nybegynder
26. marts 2003 - 15:39 #7
giver det samme, hvad gør LEFT JOIN?

/moreless
Avatar billede bearhugx Nybegynder
26. marts 2003 - 15:41 #8
Den sætter de to tabeller sammen

lige to sek.. har oprettet en test db og afprøver udtrykket nu...
Avatar billede bearhugx Nybegynder
26. marts 2003 - 15:42 #9
Hos mig virker

SELECT book.*
FROM bog as book
LEFT JOIN bruger as usr ON book.id=usr.id
WHERE usr.id IS NULL;

fint...
Avatar billede moreless Nybegynder
26. marts 2003 - 15:44 #10
hvorfor vil du have bog til at hedde book er det ikke blot med til at forvirre?
Avatar billede bearhugx Nybegynder
26. marts 2003 - 15:45 #11
når man JOINer to tabeller, så sætter man dem sammen - og det gør man ud fra ON-sætningen

I dette tilfælde sætter vi de bøger sammen med de brugere, som har ens id

dette vil jo så betyde, at der er nogle bøger, som har en id, der ikke findes nogen bruger.id til -- og i de celler vil der komme til at stå null

prøv at åbne MySQL prompten og skriv

SELECT * FROM Bog LEFT JOIN Bruger ON Bog.id=Bruger.id - så kan du få et grafisk udtryk af, hvad der sker...
Avatar billede bearhugx Nybegynder
26. marts 2003 - 15:48 #12
At jeg bruger alias er kun fordi at jeg kunne omskrive noget kode, jeg lavede til et bibliotek engang...

Du kan sagtens gøre det uden aliaser som
  SELECT *
  FROM bog
  LEFT JOIN bruger ON bog.id=bruger.id
  WHERE bruger.id IS NULL;
Avatar billede moreless Nybegynder
26. marts 2003 - 15:52 #13
det funker nu.. ideen er så at jeg vil have den slettet kan du lave en delete query? jeg må smutte..
Avatar billede bearhugx Nybegynder
26. marts 2003 - 15:53 #14
du vil have slettet de bøger, som der ikke er brugere tilknyttet - eller ?
Avatar billede moreless Nybegynder
26. marts 2003 - 18:14 #15
ja dem som har værdien NULL i din query
Avatar billede moreless Nybegynder
27. marts 2003 - 14:56 #16
DELETE FROM bog
LEFT JOIN bruger ON bog.id=bruger.id
WHERE bruger.id IS NULL;

funker vel nok ikke?
Avatar billede bearhugx Nybegynder
27. marts 2003 - 21:29 #17
Nope .... jeg har kigget lidt på det - og har simpelthen ikke kunne finde ud af den... Så vidt jeg husker kommer SubSelects i MySQL v. 4.1 - det har længe været et ønske - og da vil det blive muligt med noget "simpelt" SQL - men lige pt. kan jeg ikke kringle den!

/Søren
Avatar billede moreless Nybegynder
27. marts 2003 - 22:27 #18
er det ikke noget med "DELETE SELECTED" agtig?
Avatar billede bearhugx Nybegynder
27. marts 2003 - 22:37 #19
DELETE SELECTED har jeg nu aldrig hørt om ... Det er ikke noget, jeg umiddelbart kan finde i min SQL bog, her ved siden af mig :-))
Avatar billede moreless Nybegynder
29. marts 2003 - 14:09 #20
ret simpelt fandt jeg en løsning

SELECT bog.navn, bog.id AS del
FROM bog
LEFT JOIN bruger ON bog.id = bruger.id
WHERE bruger.id IS NULL
GROUP BY bog.id");
while ($row = mysql_fetch_array($result)) {
mysql_query("DELETE FROM bog WHERE id = '$row[del]'") or die (mysql_error());
}
Avatar billede moreless Nybegynder
29. marts 2003 - 14:09 #21
men kunne ikke have gjort det uden din hjælp
Avatar billede bearhugx Nybegynder
29. marts 2003 - 18:24 #22
Ahhh du måtte gerne bruge to statements og PHP - jamen, så bliver det jo gjort meget nemere ... Siden spørgsmålet blev oprettet i MySQL og ikke i PHP troede jeg du gik efter ét statement, som kunne klare værket....

Men det glæder mig, at du har fået det til at virke!! :-) (og selvfølgelig tak for points)
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