Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用左联接优化此sql查询?_Mysql_Join_Left Join - Fatal编程技术网

Mysql 如何使用左联接优化此sql查询?

Mysql 如何使用左联接优化此sql查询?,mysql,join,left-join,Mysql,Join,Left Join,我对以下SQL查询有问题。如您所见,我连接了一些表(候选者\基础、候选者\郎、候选者的省\大学、候选者的学位\大学),然后将结果连接到另一个表“专业\大学经验\大学基础”,但是,查询返回了几个实例(例如:它返回两个id_candidate_basic=55的实例,或者返回三个id_candidate_basic=59的实例) 我的问题是,我只希望查询每个id_candidate_basic返回1个实例。也就是说,属性为“main_job”且值为1的实例,如果不可能,则返回null 我试图将和pr

我对以下SQL查询有问题。如您所见,我连接了一些表(候选者\基础、候选者\郎、候选者的省\大学、候选者的学位\大学),然后将结果连接到另一个表“专业\大学经验\大学基础”,但是,查询返回了几个实例(例如:它返回两个id_candidate_basic=55的实例,或者返回三个id_candidate_basic=59的实例)

我的问题是,我只希望查询每个id_candidate_basic返回1个实例。也就是说,属性为“main_job”且值为1的实例,如果不可能,则返回null

我试图将和professional\u experience\u basic.main\u job=1放在WHERE子句中,但它删除了main\u job=null的实例

我觉得我已经接近最后的结果了,但我在最后的努力中花了很多时间。有人知道解决方法吗? 提前谢谢

查询:

SELECT DISTINCT
    candidate_basic.id_candidate_basic,
    candidate_lang.town,
    province.name,
    degree_of_candidate.id_degree_of_candidate,professional_experience_basic.main_job

FROM (((((candidate_basic
    INNER JOIN candidate_lang 
    ON candidate_lang.id_candidate_basic=candidate_basic.id_candidate_basic)
    INNER JOIN province_of_candidate
    ON province_of_candidate.id_candidate_basic=candidate_basic.id_candidate_basic)
    INNER JOIN province
    ON province.id_province=province_of_candidate.id_province)
    INNER JOIN degree_of_candidate
    ON degree_of_candidate.id_candidate_basic=candidate_basic.id_candidate_basic)
    LEFT JOIN professional_experience_basic
    ON professional_experience_basic.candidate_id=candidate_basic.id_candidate_basic)

WHERE candidate_basic.candidate_state=2
  AND degree_of_candidate.is_main_degree
  AND candidate_lang.id_website_lang=1
目前的结果是:

我想要的结果是:


将列列表中的
professional\u experience\u basic.main\u job
更改为
max(professional\u experience\u basic.main\u job)
,然后:

GROUP BY candidate_basic.id_candidate_basic, candidate_lang.town,
          province.name, degree_of_candidate.id_degree_of_candidate

首先分组你的结果

... AND candidate_lang.id_website_lang=1
GROUP BY 
    candidate_basic.id_candidate_basic,
    candidate_lang.town,
    province.name,
    degree_of_candidate.id_degree_of_candidate
我想你最想要的是这份工作,但我不知道。 将选择更改为:

SELECT DISTINCT
    candidate_basic.id_candidate_basic,
    candidate_lang.town,
    province.name,
    degree_of_candidate.id_degree_of_candidate,MAX(professional_experience_basic.main_job)

看起来你想让max出现在这里,但我不知道

是的,他在这里需要max或其他什么。但是在进行这种分组时,通常你并不真正关心最后一列中的数字。