[英]MySQL - subquery in WHERE unknown column in join (count in subquery)
以下查詢給了我這個錯誤:
Error Code: 1054. Unknown column 'jobs.id' in 'on clause'
SELECT clinics.id as cid, clinics.name, clinics.address AS clinicAddress,
clinics.post_code as clinicZip, clinics.city AS clinicCity, clinics.region,
countries.full_name AS country,
jobs.name AS jobName, jobs.created_at AS jobCreatedAt, jobs.from AS jobStarts,
jobs.description AS jobDescription, jobs.rates, jobs.max_applicants, jobs.created_at,
locum_types.name AS locumName,
job_statuses.name AS statusName,
CONCAT(users.first_name, ' ', users.last_name) AS userName, users.title AS userTitle,
roles.name AS roleName
FROM clinics
JOIN countries ON countries.id = clinics.country_id
JOIN jobs ON clinics.id = jobs.clinics_id
JOIN users ON users.id = jobs.users_id
JOIN roles ON roles.id = users.roles_id
JOIN locum_types ON locum_types.id = jobs.locum_types_id
JOIN job_statuses ON job_statuses.id = jobs.statuses_id
WHERE (LOWER(`clinics`.`city`) like '%abbey%'
OR LOWER(`clinics`.`post_code`) like '%abbey%'
OR LOWER(`clinics`.`region`) like '%abbey%')
AND jobs.to >= '2020-01-31 07:53:48'
AND applicants IN (SELECT COUNT(user_jobs_application.id) as applicants
FROM user_jobs_application
JOIN user_jobs_application as jobApplication ON user_jobs_application.jobs_id = jobs.id
HAVING applicants < jobs.max_applicants)
LIMIT 20 OFFSET 0
我正在嘗試計算user_jobs_application表中的所有作業,並檢查計數是否小於作業表中的max_applicants 。
作業表的結構如下:
id
max_applicants
created_at
user_jobs_application表(這是數據透視表):
id
users_id
jobs_id
基本上我需要計算該工作的所有申請並檢查它是否在限制范圍內( max_applicants )。 知道我在這里做錯了什么嗎?
嘗試 :
JOIN user_jobs_application as jobApplication ON user_jobs_application.id = jobs.id
代替 :
JOIN user_jobs_application as jobApplication ON user_jobs_application.jobs_id = jobs.id
您在applicants IN
之后執行的子查詢與外部查詢分開處理,因此它不會“看到” jobs
表,因為它超出了它的范圍。
為什么不先從一個簡單的查詢開始。 只為得到你想要的結果。 只關注兩張桌子。 您可以使用如下查詢:
SELECT jobs.id, jobs.max_applicants, uja.jobs_id, uja.total_applicants
FROM jobs
JOIN (SELECT jobs_id,COUNT(*) total_applicants FROM user_jobs_application GROUP BY jobs_id) uja
ON uja.jobs_id = jobs.id
WHERE jobs.to >= '2020-01-31 07:53:48'
AND uja.total_applicants > jobs.max_applicants;
將user_jobs_application
表中的計數轉換為子查詢,然后將其與jobs
表連接。 看看這是否可以返回您想要的結果。 如果是,那么您可以將其實現到您的原始查詢中。 大概是這樣的:
SELECT clinics.id AS cid, clinics.name, clinics.address AS clinicAddress,
clinics.post_code AS clinicZip, clinics.city AS clinicCity, clinics.region,
countries.full_name AS country,
jobs.name AS jobName, jobs.created_at AS jobCreatedAt, jobs.from AS jobStarts,
jobs.description AS jobDescription, jobs.rates, jobs.max_applicants, jobs.created_at,
locum_types.name AS locumName,
job_statuses.name AS statusName,
CONCAT(users.first_name, ' ', users.last_name) AS userName, users.title AS userTitle,
roles.name AS roleName
FROM clinics
JOIN countries ON countries.id = clinics.country_id
JOIN jobs ON clinics.id = jobs.clinics_id
JOIN users ON users.id = jobs.users_id
JOIN roles ON roles.id = users.roles_id
JOIN locum_types ON locum_types.id = jobs.locum_types_id
JOIN job_statuses ON job_statuses.id = jobs.statuses_id
/*Insert here*/
JOIN
(SELECT jobs_id,COUNT(*) total_applicants
FROM user_jobs_application GROUP BY jobs_id) uja ON uja.jobs_id = jobs.id
/**/
WHERE (LOWER(`clinics`.`city`) LIKE '%abbey%'
OR LOWER(`clinics`.`post_code`) LIKE '%abbey%'
OR LOWER(`clinics`.`region`) LIKE '%abbey%')
AND jobs.to >= '2020-01-31 07:53:48'
/*and add the condition here*/
AND uja.total_applicants > jobs.max_applicants
/**/
LIMIT 20 OFFSET 0;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.