Avatar billede cms Nybegynder
25. maj 2002 - 21:14 Der er 18 kommentarer og
1 løsning

Select minus select

Hejsa - jeg håber I har lyst til at hjælpe en meget let øvet Mysql-nybegynder.

Jeg har to tabeller tabel1 og tabel2 som hver har en kolonne der hedder user.
Jeg kører en query med et antal kriterier på tabel1 og får nogle rækker kun med kolonnen user.
For hver af disse 'user' skal jeg nu tjekke, at der ikke findes en række i tabel2 med tabel1.user=tabel2.user

Hvordan gør jeg?
Avatar billede cms Nybegynder
25. maj 2002 - 21:17 #1
Og alle disse rækker, der 'findes i tabel1 men ikke i tabel2' skal returneres
Avatar billede a1a1 Novice
25. maj 2002 - 21:25 #2
prøv med noget ala...

select u.ID, u.user FROM tabel1 u LEFT JOIN tabel2 u2 ON u.user = u2.user WHERE u2.user IS NULL

:)
Avatar billede a1a1 Novice
25. maj 2002 - 21:26 #3
+ dine egne "where" kriterier selv...
Avatar billede cms Nybegynder
25. maj 2002 - 21:35 #4
oki, prøver lige...
Avatar billede cms Nybegynder
25. maj 2002 - 21:45 #5
Det går fint når jeg putter WHERE-kriterier på, som tjekker på tabel1, men jeg får et tomt resultat når jeg tester på tabel2. Skal det være negativ/omvendt testning, eller hvad?
Eller kan du forklare hvad LEFT JOIN og u2.user IS null gør?
Avatar billede cms Nybegynder
25. maj 2002 - 21:46 #6
når jeg tester på tabel2 -> når jeg også tester på tabel2
Avatar billede a1a1 Novice
25. maj 2002 - 21:50 #7
left join
vælger alle til venstre (tabel1) og dem der matcher hvis der ikke er nogen der matcher for disses felter værdien NULL

IS NULL
du skal have den der ikke har nogen relation til tabel1 (har værdien NULL)

prøv lige at skrive din sql sætning her...
Avatar billede a1a1 Novice
25. maj 2002 - 21:52 #8
for disses ~ får disses :)
Avatar billede cms Nybegynder
25. maj 2002 - 21:55 #9
Okay - nu hed den så 'owner' og ikke 'user'. 'user' er en kolonne, der skal testes på i tabel2, og 'owner' skal testes på i tabel1.

SELECT tabel1.owner FROM tabel1 LEFT JOIN tabel2 ON tabel1.owner = tabel2.owner WHERE tabel2.owner IS NULL AND tabel1.kategori=2 AND tabel1.owner<>'admin' AND tabel2.user='mig'
Avatar billede cms Nybegynder
25. maj 2002 - 21:56 #10
:)
Avatar billede a1a1 Novice
25. maj 2002 - 22:01 #11
du får et tomt resultat fordi at du vil have at der er noget i tabel2
Avatar billede cms Nybegynder
25. maj 2002 - 22:10 #12
ahhh. jeg ser din pointe.
Men det er jo fordi det kun er i tilfældet at tabel2.user='mig' OG tabel2.owner=tabel1.owner, at den skal udelukkes.
Og det har jeg netop puttet ind:
SELECT tabel1.owner FROM tabel1 LEFT JOIN tabel2 ON tabel1.owner = tabel2.owner AND tabel2.user='mig' WHERE tabel2.owner IS NULL AND tabel1.kategori=2 AND tabel1.owner<>'admin'
Og det virker :)))

Tusind tak for hjælpen!!
Avatar billede cms Nybegynder
25. maj 2002 - 22:10 #13
Iøvrigt, hvor ser jeg en beskrivelse af de forskellige funktioner/clauses/statements osv. osv.?
I manualen kan jeg kun finde Join Syntax, men ikke nogen beskrivelse af Join-funktionerne
Avatar billede cms Nybegynder
25. maj 2002 - 22:25 #14
Nu jeg har dig - du kan få flere point senere - ville jeg lige spørge:
Kan man også bruge LEFT JOIN osv. på UPDATE?
Altså, hvis jeg nu ville ændre på netop de rækker, som kommer ud af ovenstående select-query.
Avatar billede a1a1 Novice
25. maj 2002 - 23:24 #15
tjaa, ved det ikke lige men prøv :)

mht. sql
kig her engang, hvis du ikke kender den
http://www.w3schools.com/sql/default.asp
Avatar billede a1a1 Novice
25. maj 2002 - 23:27 #16
download evt. mySQL manualen

windows HLP versionen er den nemeste at navigere rundt i :)

http://www.mysql.com/documentation/mysql/alternate.html
Avatar billede cms Nybegynder
26. maj 2002 - 01:39 #17
Jeg fik løst problemet :)
Takker - de links er guld værd!
Avatar billede a1a1 Novice
26. maj 2002 - 01:43 #18
:) det var da godt

og tak for points...
Avatar billede cms Nybegynder
26. maj 2002 - 02:03 #19
Sov godt :))
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