Mysql 从2个不同的数据库加入时出现未知列错误

Mysql 从2个不同的数据库加入时出现未知列错误,mysql,sql,Mysql,Sql,构建查询时遇到问题,在on子句中的未知列j.id上出现错误 这是我目前的疑问 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.i

构建查询时遇到问题,在on子句中的未知列j.id上出现错误

这是我目前的疑问

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
从我所看到的语法是正确的

然而,连接可能是不必要的,我的查询需要返回的是

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

有没有可能在不使用联接的情况下使WHERE语句成为可选的?

好吧,您正在混合“表联接”的语法,这是。。。这不是个好主意

只需在左连接中添加附加子句就可以了

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

将您的选择更改为:

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

如果使用join,则对from语句中的所有表使用它。

列j.id在join条件下不可访问,因为指定内部联接的顺序不同。我已重新安排了顺序,如下所示:

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;

即使您没有显式地使用JOIN关键字,事实上,您在查询中使用(内部)连接。谢谢:),我甚至从来没有想到过那句话。(我会接受的,如果你允许的话)