Avatar billede Slettet bruger
21. februar 2005 - 13:28 Der er 10 kommentarer og
1 løsning

WHERE i stedet for ON

Jeg har læst følgende på mysql.com angående JOIN:

"You should generally not have any conditions in the ON part that are used to restrict which rows you want in the result set, but rather specify these conditions in the WHERE clause."

ref: http://dev.mysql.com/doc/mysql/en/join.html

Kan nogen give mig en forklaring på hvorfor?
Avatar billede arne_v Ekspert
21. februar 2005 - 13:44 #1
x JOIN y ON x.a = y.b

er en konstruktion som bruges til at joine

WHERE x.a = 137

er en konstruktion som bruges til at udvælge rækker.

Det er ihvertfald ikke pænt at blande de 2 sammen.

Jeg kan ikke gennemskue om der skulle være performance mæssige implikationer
også.
Avatar billede Slettet bruger
21. februar 2005 - 14:03 #2
Sorry det var en dum fejl fra min side. Jeg læste ikke ordentlig efter.
Men du får nu point alligevel.. Smid et svar og tak skal du ha..
Avatar billede arne_v Ekspert
21. februar 2005 - 14:08 #3
ok
Avatar billede hmortensen Nybegynder
22. februar 2005 - 03:30 #4
Arne, har før haft testet de to muligheder på MSSQL ved 3000 poster, og der var ingen forskel. Kan ikke forestille mig at der er forskel på mySQL og MSSQL på det område.
Avatar billede Slettet bruger
22. februar 2005 - 08:04 #5
arne_v -> Jeg kom til at tænke på den query du hjalp mig med for et par dage siden: http://www.eksperten.dk/spm/592422

Der bruger du WHERE i stedet for ON?
Avatar billede arne_v Ekspert
22. februar 2005 - 19:53 #6
Ja.

Du kan lave en JOIN på 2 måder:

SELECT *
FROM a,b
WHERE a.x=b.x

og

SELECT *
FROM a JOIN b ON a.x=b.x

Det sidste er vel egentligt anbefalelsesværdigt, men det er en nyere konstruktion, som
slet ikke var opfundet da jeg lærte SQL.

Med en yderligere betingelse på er det så:

SELECT *
FROM a,b
WHERE a.x=b.x AND a.y=123

og

SELECT *
FROM a JOIN b ON a.x=b.x
WHERE a.y=123

som begge er OK - den jeg ikke kan lide er:

SELECT *
FROM a JOIN b ON a.x=b.x AND a.y=123
Avatar billede arne_v Ekspert
22. februar 2005 - 19:54 #7
hm>

Synes jeg heller ikke, men man ved aldrig medmindre man tester det.
Avatar billede hmortensen Nybegynder
22. februar 2005 - 21:06 #8
Personligt bruger jeg aldrig JOIN metoden, da jeg ikke har lært det sådan.
Betyder heller ik så meget ved små joins, men ved mange tabeller, så er join meget mere overskueligt.
Avatar billede arne_v Ekspert
22. februar 2005 - 21:10 #9
Man kan jo blive nødt til at lave en LEFT JOIN en gang imellem ...
Avatar billede hmortensen Nybegynder
22. februar 2005 - 22:05 #10
Ja, det her gælder selvfølgelig kun inner joins
Avatar billede arne_v Ekspert
22. februar 2005 - 22:16 #11
Visse SQL dialekter har jo suspekte WHERE syntaxer for det også.

SELECT *
FROM a,b
WHERE a.x*=b.x

men der synes jeg nu klart at ANSI syntaxen er pænere.

(jeg ved iøvrigt ikk eom MySQL understøtter den slags)
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