Toon posts:

Sql Outerjoin

Pagina: 1
Acties:
  • 446 views

Verwijderd

Topicstarter
Hallo,
Ik zit met het volgende probleem.
Ik werkte steeds met de where clausule voor tabellen de koppelen.
Maar ik heb nu ook de null waarde nodig. Na wat gegoogle komt ik op outer join.
Maar ik blijf fouten zitten;
SQL:
1
2
3
4
5
6
7
8
SELECT m.memberID as memberID,s.speeldagid as speeldagid ,SUM(p.score) as score
    FROM tblpronos p ,tblspeeldag s,tblwedstrijden w,tblmembers m
    WHERE w.speeldagid = w.speeldagid and
    s.speeldagid = 1
    LEFT OUTER JOIN tblpronos p on tblmembers.memberID = p.memberID 
    LEFT OUTER  tblpronos p on tblspeeldag.speeldagid = p.wedstrijdID
    group by m.memberID,s.speeldagid
    order by p.score DESC

ik wil dus tblpronos daar ook de null waarde van hebben en die dan zo koppelen. maar syntactisch krijg ik steeds dit:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT OUTER JOIN tblpronos p on tblmembers . memberID = p . membe

Kunnen jullie mij helpen? Alvast bedankt.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Als je nou hebt zitten Googlen naar syntax hadden ze daar vast ook wel staan dat je je joins voor je where-clause moet zetten, niet andersom.

Vind w.speeldagid = w.speeldagid trouwens sowieso een briljante condition.

[ Voor 23% gewijzigd door curry684 op 08-06-2008 11:48 ]

Professionele website nodig?


  • remco_k
  • Registratie: April 2002
  • Laatst online: 23:10

remco_k

een cassettebandje was genoeg

Iets te makkelijk dit:
LEFT OUTER JOIN tblpronos p on tblspeeldag.speeldagid = p.wedstrijdID

Daarnaast:
speeldagid = p.wedstrijdID ?
Ik denk dat jij nog even goed na moet denken over het database model.
Echt logisch ziet dit er niet uit.

offtopic:
@curry684
Wil jij je icon effe aanpassen. Mijn laptop gaat naar 100% cpu als jouw icon 2x op het scherm staat in IE7. :+
In Firefox gaat het wel goed...

[ Voor 74% gewijzigd door remco_k op 08-06-2008 11:53 ]

Alles kan stuk.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

remco_k schreef op zondag 08 juni 2008 @ 11:48:
Iets te makkelijk dit:
LEFT OUTER JOIN tblpronos p on tblspeeldag.speeldagid = p.wedstrijdID
Ow ja ook nog :X

Professionele website nodig?


  • mithras
  • Registratie: Maart 2003
  • Niet online
Waarom doe je een left outer join? Afaik is een left join voldoende. Verder join je twee keer tblpronos (waarbij je een keer het woord join vergeet), maar dat is ook niet de bedoeling. Tot slot geef je tblmembers een alias m, maar gebruik je in de join de volledige naam tblmembers :?

Ik zou bovenstaande drie punten even bekijken, dan kom je al een stuk verder :)

Verwijderd

Topicstarter
Ja idd, snap de logica iets beter. en jah met al dat testen komen er stomme fouten in.
Ik heb nu dit:
SQL:
1
2
3
4
5
6
7
8
SELECT m.memberID as memberID,s.speeldagid as speeldagid ,SUM(p.score) as score
    FROM tblspeeldag s,tblwedstrijden w,tblmembers m
    LEFT OUTER JOIN tblpronos p on tblmembers.memberID = p.memberID 
    LEFT OUTER JOIN tblpronos p on tblwedstrijden.speeldagid = p.wedstrijdID
    WHERE w.speeldagid = s.speeldagid and
    s.speeldagid = 1
    group by m.memberID,s.speeldagid
    order by p.score DESC

(die tblpronos heeft een dubbele sleutel daarom moet die 2x gelinkt worden)
Maar dan krijg ik dit: #1066 - Not unique table/alias: 'p'

en als ik 1 join hernoem vb:
LEFT OUTER JOIN tblpronos p on tblwedstrijden.speeldagid = p.wedstrijdID wordt dan
LEFT OUTER JOIN tblpronos pp on tblwedstrijden.speeldagid = pp.wedstrijdID
krijg ik:
#1054 - Unknown column 'tblmembers.memberID' in 'on clause'
terwijl die tabel en veld echt wel bestaat.
Het kunnen mss heel domme fouten zijn, maar ik geraak er niet uit.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

a) Spanned primary keys zijn bijna altijd een slecht idee
b) Dubbele conditions join je niet 2 keer de tabel voor (hint: in ON mag je ook AND gebruiken)
c) Die non-unique alias error is wel iets te duidelijk he?
d) Mix asjeblieft niet lelijke legacy syntax (meerdere tabellen in je WHERE clause) met moderne syntax, dat is waarschijnlijk de bron van al je problemen. Hint: INNER JOIN.
e) Als je aliassen aanbrengt, gebruik ze dan

[ Voor 5% gewijzigd door curry684 op 08-06-2008 12:39 ]

Professionele website nodig?


Verwijderd

Topicstarter
Wat bedoel je met spannende PK? dubbele pk's?
Ik heb dan dit:
SQL:
1
2
3
4
5
6
7
SELECT m.memberID as memberID,s.speeldagid as speeldagid ,SUM(p.score) as score
FROM tblspeeldag s,tblmembers m
INNER JOIN tblwedstrijden w ON s.speeldagid = w.speeldagid
LEFT OUTER JOIN tblpronos p on m.memberID = p.memberID AND w.speeldagid = p.wedstrijdID
WHERE s.speeldagid = 1
group by m.memberID,s.speeldagid
order by p.score DESC

Maar dan is het dit:#1054 - Unknown column 'tblspeeldag.speeldagid' in 'on clause'
of ik nu 'tblspeeldag.speeldagid' gebruik of s.speeldagid is het dezelfde error.

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

f) Gebruik [code=sql]...[/code] tags rond je SQL (edit ook je voorgaande posts even alsjeblieft).
g) m.memberID as memberID is zinloos. Zie ook e)
h) Wees consequent in je naamgeving, taalkeuze (NE/EN), maak het leesbaar en gebruik geen overbodige prefixes. Kortom: leden.lid_id, speeldagen.speeldag_id, etc.

Je joined nu tblmembers met tblwedstrijden. Geen van beide tabellen bevat de kolom tblspeeldag.speeldagid.

[ Voor 9% gewijzigd door Confusion op 08-06-2008 13:09 ]

Wie trösten wir uns, die Mörder aller Mörder?


Verwijderd

Topicstarter
idd daar heb je gelijk in.
Weer stap verder. Die taalkeuze kan ik niet even aanpassen, zou teveel aan de db moeten prutsen dan, maar is idd een aanrader.
Maar krijg nog wel dezelfde fout:
SQL:
1
2
3
4
5
6
7
SELECT m.memberID,s.speeldagid ,SUM(p.score)
FROM tblspeeldag s,tblmembers m
INNER JOIN tblwedstrijden w ON s.speeldagid = w.speeldagid
LEFT OUTER JOIN tblpronos p on m.memberID = p.memberID AND w.wedstrijdID = p.wedstrijdID
WHERE s.speeldagid = 1
group by m.memberID,s.speeldagid
order by p.score DESC

#1054 - Unknown column 's.speeldagid' in 'on clause'

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

mithras schreef op zondag 08 juni 2008 @ 11:49:
Waarom doe je een left outer join? Afaik is een left join voldoende.
offtopic:
LEFT JOIN en LEFT OUTER JOIN is, voor zover ik weet, precies hetzelfde? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Verwijderd schreef op zondag 08 juni 2008 @ 13:22:
Maar krijg nog wel dezelfde fout:
Ik citeer mezelf uit mijn vorige post:
Je joined nu tblmembers met tblwedstrijden. Geen van beide tabellen bevat de kolom tblspeeldag.speeldagid.

Wie trösten wir uns, die Mörder aller Mörder?


Verwijderd

Topicstarter
tblwedstrijd heeft wel een veld speeldagid...
tblmembers niet. over welke regel heb jij het dan?

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 21:18
Ik citeer mezelf uit mijn vorige post:

Je joined nu tblmembers met tblwedstrijden. Geen van beide tabellen bevat de kolom tblspeeldag.speeldagid.
Hint: relevant deel van je code:
SQL:
1
2
,tblmembers m
INNER JOIN tblwedstrijden w ON s.speeldagid = w.speeldagid 

spoiler:
Zou dit werken?:
FROM tblwedstrijden w INNER JOIN tblspeeldag s ON s.speeldagid = w.speeldagid LEFT OUTER JOIN (tblpronos p INNER JOIN tblmembers m on m.memberID = p.memberID) ON p.wedstrijdID = w.speeldagid

[ Voor 27% gewijzigd door Bolukan op 08-06-2008 18:13 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:26
mithras schreef op zondag 08 juni 2008 @ 11:49:
Waarom doe je een left outer join? Afaik is een left join voldoende.
Een LEFT JOIN is een OUTER JOIN; als je nu schrijft LEFT JOIN of LEFT OUTER JOIN, dan komt dat op hetzelfde neer :)
Wat NMe dus ondertussen al verteld heeft ....
Verwijderd schreef op zondag 08 juni 2008 @ 12:31:
Ja idd, snap de logica iets beter. en jah met al dat testen komen er stomme fouten in.
De bedoeling van testen is dat je fouten ontdekt en verbeterd :?

Verder denk ik dat de hier aangebrachte hints je toch wel moeten doen inzien dat je best eerst eens een syntax ref bekijkt; je de fouten die je krijgt begrijpend leest, nadenkt, en kijkt hoe je dit kunt oplossen ... Syntax errors kan je toch makkelijk -mits wat moeite- zelf oplossen ?

[ Voor 53% gewijzigd door whoami op 08-06-2008 22:18 ]

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.