我的查詢使用幾個LEFT JOIN
從幾個表中抽取結果。目前它工作正常。但是,我現在必須從同一個表列中獲取兩個不同的字段(但匹配不同的條件)。我不知道如何確保從正確的LEFT JOIN分配正確的列別名。合理?MySQL:如何將列別名與特定的JOIN子句相關聯
所以這裏的例如...
SELECT table1.user_id, table2.value AS school, table2.value AS language FROM table1
LEFT JOIN table2 ON table2.user_id = table1.user_id AND table2.key = 'school'
LEFT JOIN table2 ON table2.user_id = table1.user_id AND table2.key = 'language'
我需要的列別名與相應JOIN
。我該怎麼做呢?
供參考,這是我原來的查詢(無二次JOIN):
SELECT wsat_ib.user_id, wpjb_resume.id resume_id, wpjb_resume.firstname, wpjb_resume.lastname,
wsat_ib.overall_score, wsat_ib.account_score, wsat_ib.econ_score, wsat_ib.math_score,
wsat_ib.logic_score, wsat_ib.fsanaly_score, wsat_ib.corpval_score, wsat_ib.end_time,
GROUP_CONCAT(DISTINCT wp_usermeta.meta_value) AS target_employers, wpjb_field_value.value AS school,
GROUP_CONCAT(wpjb_application.job_id) AS applications FROM `wsat_ib`
LEFT JOIN wp_usermeta ON wsat_ib.user_id = wp_usermeta.user_id
LEFT JOIN wpjb_resume ON wsat_ib.user_id = wpjb_resume.user_id
LEFT JOIN wpjb_field_value ON wpjb_resume.id=wpjb_field_value.job_id AND wpjb_field_value.field_id=3
LEFT JOIN wpjb_application ON wpjb_application.user_id = wsat_ib.user_id
WHERE (wp_usermeta.meta_key = 'target_employer' AND (wp_usermeta.meta_value = 'public' OR wp_usermeta.meta_value=1523) AND wpjb_resume.is_active =1) AND (wpjb_resume.firstname='Xu' OR wpjb_resume.lastname='Xu')
GROUP BY wsat_ib.user_id, resume_id, wpjb_resume.firstname, wpjb_resume.lastname, wsat_ib.overall_score, wsat_ib.account_score, wsat_ib.econ_score, wsat_ib.math_score, wsat_ib.logic_score, wsat_ib.fsanaly_score, wsat_ib.corpval_score, wsat_ib.end_time, wpjb_field_value.value
ORDER BY overall_score DESC LIMIT 0, 20;
這是我在實施以下方案的早期嘗試。我已將AS school
添加到JOIN子句中,但尚未爲該表添加第二個JOIN。出於某種原因,此版本不會返回任何結果。
SELECT wsat_ib.user_id, wpjb_resume.id resume_id, wpjb_resume.firstname, wpjb_resume.lastname,
wsat_ib.overall_score, wsat_ib.account_score, wsat_ib.econ_score, wsat_ib.math_score,
wsat_ib.logic_score, wsat_ib.fsanaly_score, wsat_ib.corpval_score, wsat_ib.end_time,
GROUP_CONCAT(DISTINCT wp_usermeta.meta_value) AS target_employers, wpjb_field_value.value AS school,
GROUP_CONCAT(wpjb_application.job_id) AS applications FROM `wsat_ib`
LEFT JOIN wp_usermeta ON wsat_ib.user_id = wp_usermeta.user_id
LEFT JOIN wpjb_resume ON wsat_ib.user_id = wpjb_resume.user_id
LEFT JOIN wpjb_field_value AS school ON wpjb_resume.id=wpjb_field_value.job_id AND wpjb_field_value.field_id=3
LEFT JOIN wpjb_application ON wpjb_application.user_id = wsat_ib.user_id
WHERE (wp_usermeta.meta_key = 'target_employer' AND (wp_usermeta.meta_value = 'public' OR wp_usermeta.meta_value=1523) AND wpjb_resume.is_active =1) AND (wpjb_resume.firstname='Xu' OR wpjb_resume.lastname='Xu')
GROUP BY wsat_ib.user_id, resume_id, wpjb_resume.firstname, wpjb_resume.lastname, wsat_ib.overall_score, wsat_ib.account_score, wsat_ib.econ_score, wsat_ib.math_score, wsat_ib.logic_score, wsat_ib.fsanaly_score, wsat_ib.corpval_score, wsat_ib.end_time, wpjb_field_value.value
ORDER BY overall_score DESC LIMIT 0, 20;
謝謝。我在上面評論@Andomar,出於某種原因,當我在JOIN中向表中添加別名時,查詢沒有返回任何結果。我已經在上面包含了我的查詢。你有沒有看到任何會阻止它按預期工作的內容? – emersonthis
@Emerson是的,你不會給頂部示例查詢中的表實例提供別名。在使用wordpress表的底部查詢中,我沒有看到任何連接兩次的表,所以不要看到這是如何相關的。你認爲哪張桌子加入了兩次? –
對不起,我感到困惑。這是我進行修改之前的原始查詢。我現在將添加新的查詢(這不起作用)... – emersonthis