Ik vermoed Puzzles
heeft geen kolom PuzzleID
. Heet de kolom gewoon ID
aan die tafel? Of Puzzle_ID
?
Je moet SHOW CREATE TABLE Puzzles
uitvoeren om de huidige definitie van die tabel te zien.
Soms kan een ontbrekend citaat de boosdoener zijn:
... ON `Puzzles.PuzzleID` ...
Het bovenstaande zou zoeken naar een kolom met de letterlijke naam "Puzzles.PuzzleID
," dat wil zeggen een kolomnaam van 16 tekens lang met een punt in het midden.
@Bell verdient de prijs voor het opmerken dat je komma-achtige joins en SQL-92-achtige joins door elkaar haalt. Dat was me niet opgevallen!
U moet niet beide in dezelfde query gebruiken, omdat de prioriteit van join-bewerkingen waarschijnlijk voor verwarring zorgt.
De JOIN
zoekwoord heeft een hogere prioriteit. Door uw zoekopdracht te vereenvoudigen, zodat we de tabeluitdrukkingen kunnen bekijken, wordt deze als volgt geëvalueerd:
SELECT . . .
FROM (Puzzles JOIN PuzzleCategories),
(Clients JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages)
Het probleem is dat de join naar PuzzleUsages
moet vergelijken met de Puzzles.PuzzleID
kolom, maar vanwege het prioriteitsprobleem kan dit niet. De kolom maakt geen deel uit van de operanden van de laatste JOIN
.
U kunt haakjes gebruiken om de fout op te lossen, waarbij de prioriteit van tabeluitdrukkingen expliciet wordt overschreven (net zoals u haakjes zou gebruiken in rekenkundige uitdrukkingen):
SELECT . . .
FROM Puzzles JOIN (PuzzleCategories, Clients)
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages
Of je kunt gewoon SQL-92 gebruiken JOIN
syntaxis consequent. Ik ben het met @Bell eens dat dit duidelijker is.
SELECT . . .
FROM Puzzles JOIN PuzzleCategories JOIN Clients
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages