sql >> Database >  >> RDS >> Mysql

Onbekende kolom {0} in op clausule

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


  1. Kan het Postgres-gegevenstype NUMERIC ondertekende waarden opslaan?

  2. Top 3 redenen waarom mensen overstappen op SaaS

  3. 7 goede technische gewoonten die alle werkgevers zouden moeten aannemen

  4. Meerdere INSERT-instructies versus enkele INSERT met meerdere VALUES