mysql一张表连接另外一张表

本文介绍了一种SQL查询优化的方法,通过使用子查询和分组函数来减少多条重复记录的展示,实现从多个表中高效地获取所需数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

左边表所有行全部由,右边表多行匹配,要求只显示一行。

例如左表:SELECT * FROM `job_resu` WHERE id=302

 

右表:SELECT * FROM `job_resu_view_log` WHERE `job_resu_id` = 302

 

可以看见,左表就一条记录,右表有三条。我只需要左边表显示一行,右边表也只匹配一行。

1、不是想要的结果。

SELECT 

    job_resu.*,job_resu_view_log.*

FROM 

    `job_resu`

    LEFT join job_resu_view_log on job_resu.id = job_resu_view_log.job_resu_id

WHERE 

     job_resu.id=302

 

2、想要的结果

SELECT 

    job_resu.*,job_resu_view_log.*

FROM 

    `job_resu`,(SELECT * from job_resu_view_log GROUP BY job_resu_view_log.job_resu_id)job_resu_view_log

WHERE 

     job_resu.id=302

     AND job_resu_view_log.job_resu_id=job_resu.id

 

另外:坐标全部,右表任意匹配,但是如果on的字段重复则只取一条  下面是右表job_view_log 中的job_id可能是重复的,只取一条

select 

    job.id, 

    job.sn, 

    job.pos_id, 

    job.com_rec_fixed as com_recom, 

    job.com_share, 

    job.client_id, 

    job.showalias, 

    job.pos_lev_id, 

    job_view_logs.id as isread 

from 

    job LEFT JOIN (SELECT * FROM job_view_log WHERE job_view_log.user_id = 670 GROUP BY job_view_log.job_id)job_view_logs ON job_view_logs.job_id=job.id

where 

    status = 1 

    and unix_timestamp(enddate)>= unix_timestamp('2015-12-21 00:00:00') 

    AND job.indu_id = '5' 

    AND job.address in (

        select 

            id 

        from 

            client_address 

        where 

            'a' = 'a' 

            AND province = '9'

    ) 

order by 

    job.time DESC, 

    job.id DESC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值