首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想要将一个表中的行与另一个表中的行进行匹配,并且每行应该只匹配一次

我想要将一个表中的行与另一个表中的行进行匹配,并且每行应该只匹配一次
EN

Stack Overflow用户
提问于 2017-10-09 15:14:37
回答 1查看 38关注 0票数 0

我希望将一个表中的行与另一个表中的行进行匹配,并且每行应该只匹配一次。我构造了下面的查询,它在所有其他方面都工作得很好,除了我没有进一步调整它,使一行只能被选择一次。

代码语言:javascript
复制
try{$results_pref_school1 = $db->query('SELECT mps.mps_client_ec_no, mcs.mcs_client_ec_no, mps.mps_school_id, mcs.mcs_school_id
                                          FROM match_pref_schools AS mps
                                          INNER JOIN match_current_schools AS mcs
                                          ON mps.mps_school_id = mcs.mcs_school_id
                                          AND mcs.mcs_id IN (SELECT MIN(mcs.mcs_id) 
                                                              FROM match_current_schools AS mcs 
                                                              GROUP BY mcs.mcs_school_id)
                                          ORDER BY mcs.mcs_id');
}catch (Exception $e){
        echo 'Failed to retrieve matched preferred school';
        exit;

}
$matched_school = $results_pref_school1->fetchAll(PDO::FETCH_ASSOC);

$matched_school的var_dump会产生以下结果:

代码语言:javascript
复制
Array
(

[1] => Array
    (
        [mps_client_ec_no] => REG5
        [mcs_client_ec_no] => GL98888
        [mps_school_id] => 6
        [mcs_school_id] => 6
    )

[2] => Array
    (
        [mps_client_ec_no] => TAS4752
        [mcs_client_ec_no] => ALF1252
        [mps_school_id] => 14
        [mcs_school_id] => 14
    )

[3] => Array
    (
        [mps_client_ec_no] => MAP002
        [mcs_client_ec_no] => ALF1252
        [mps_school_id] => 14
        [mcs_school_id] => 14
    )

)

在上面的结果中,我希望ALF1252只匹配一次。

EN

回答 1

Stack Overflow用户

发布于 2017-10-09 17:54:42

@Parts 希望这对您的查询有帮助

在这篇文章中,我为remove添加了索引键"Using where;Using join buffer (Block Best) ",并添加了一个匹配的行,现在您的查询性能最好。

查询:

代码语言:javascript
复制
SELECT mps.mps_client_ec_no,mps.mps_school_id, mcs.mcs_client_ec_no,  mcs.mcs_school_id 
                                          FROM match_pref_schools AS mps   INNER JOIN match_current_schools AS mcs
                                          ON mps.mps_school_id = mcs.mcs_school_id
                                          where mcs.mcs_id IN (SELECT MIN(mcs.mcs_id) 
                                                              FROM match_current_schools AS mcs 
                                                              GROUP BY mcs.mcs_school_id)
                                          ORDER BY mcs.mcs_id

索引:

KEY mcs-key (mcs\_school\_idmcs\_idmcs\_client\_ec\_no ) KEY mps-key (mps\_school\_idmps\_client\_ec\_no)

插入match_current_schools (mcs_idmcs_client_ec_nomcs_school_idmcs_distr_idmcs_province_idmcs_client_level_taughtmcs_sub1_idmcs_sub2_id)值(6,'XYZ',1,27,3,‘高中-A级’,1,9);

点击这里:http://sqlfiddle.com/#!9/c4103d/2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46640665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档