簡體   English   中英

MySQL - 連接中未知列中的子查詢(在子查詢中計數)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM