2014-05-22 6 views
0

Je rencontre des difficultés pour créer ma requête, j'obtiens une erreur sur la colonne inconnue, j.id sur la clause.Erreur de colonne inconnue lors de la jointure à partir de deux bases de données différentes

Voilà ma question jusqu'à présent

SELECT 
    j.id, 
    j.title, 
    venues.name as venueName, 
    ja.completed 
FROM 
    dbsivcmsnew.jobs AS j, 
    venues 
LEFT JOIN dbsiv.job_applications AS ja ON ja.jobId = j.id 
WHERE 
    j.venueId = venues.id 
    AND j.closingDate > UNIX_TIMESTAMP() 
    AND j.active = 1 
ORDER BY 
    j.closingDate DESC 

D'après ce que je peux voir de here la syntaxe est correcte.

Cependant, la jointure peut-être inutile, ce que ma requête aura besoin de revenir est

SELECT 
    j.id, 
    j.title, 
    venues.name as venueName, 
    ja.completed 
FROM 
    jobs AS j, 
    venues, 
    dbsiv.job_applications AS ja 
WHERE 
    j.venueId = venues.id 
    AND j.closingDate > UNIX_TIMESTAMP() 
    AND j.active = 1 
    AND ja.pin = $CurrentUsersId //This needs to optional though, if no match ja.completed should be 0 
ORDER BY 
    j.closingDate DESC 

Est-il possible de faire cette déclaration facultative WHERE sans utiliser une jointure?

+0

Même si vous n'utilisez pas explicitement le mot-clé JOIN, vous, en fait, utilisez (INNER) rejoint dans la requête. –

Répondre

2

Eh bien, you'r mélange syntaxes pour "table de jonction", qui est ... pas une bonne idée

Il suffit d'ajouter votre clause supplémentaire dans le LEFT JOIN devrait faire l'affaire

SELECT 
    j.id, 
    j.title, 
    v.name as venueName, 
    ja.completed 
FROM 
    jobs j 
inner join venues v on v.id = j.venueID 
left join dbsiv.job_applications ja on ja.jobId = j.id and ja.pin = $CurrentUsersId 
WHERE 

    AND j.closingDate > UNIX_TIMESTAMP() 
    AND j.active = 1 
ORDER BY 
    j.closingDate DESC 
+0

Merci :), je n'ai même jamais pensé à cette clause de lieu. (Je vais accepter quand SO me le permet) –

0

Changez votre sélection pour:

SELECT 
    j.id, 
    j.title, 
    venues.name as venueName, 
    ja.completed 
FROM 
    dbsivcmsnew.jobs AS j join j.venueId = venues.id 
    venues on 
LEFT JOIN dbsiv.job_applications AS ja ON ja.jobId = j.id 
WHERE 
    j.closingDate > UNIX_TIMESTAMP() 
    AND j.active = 1 
ORDER BY 
    j.closingDate DESC 

Si vous utilisez joindre, que de l'utiliser pour toutes les tables de déclaration

0

La colonne j.id n'était pas accessible dans la condition de jointure en raison de l'ordre dans lequel vous avez spécifié INNER JOIN. J'ai réarrangé l'ordre, comme ci-dessous:

SELECT 
    j.id, 
    j.title, 
    venues.name as venueName, 
    ja.completed 
FROM  
    VENUES 
INNER JOIN dbsivcmsnew.jobs AS j ON j.venueId = venues.id 
LEFT JOIN dbsiv.job_applications AS ja ON ja.jobId = j.id 
WHERE j.closingDate > UNIX_TIMESTAMP() 
AND j.active = 1 
ORDER BY J.CLOSINGDATE DESC; 
Questions connexes