mysql 查找表中不包含另一张表的数据的记录

本文介绍了一种使用MySQL查询submit表中不包含tabletouser表数据的方法。通过将年份和表名字段拼接成字符串,然后利用NOT IN子句,可以找出submit表中不存在于tabletouser表的记录。具体实现包括使用DATE_FORMAT函数格式化年份,使用LEFT函数截取字符串,以及使用CONCAT和LPAD函数进行字符串操作。

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

tabletouser表

submit 表

查询submit表中的记录,只需要年份(time)和表名(tab_id) ,但是如果在tabletouser表中存在相同的年份(year)和表(tabletouser)则不能从submit中提取出



开始想从 submit表中得到年和表,从tabletouser中得到年和表,从submit中去除tabletouser的记录,但是效果不好,因为同时包含两个字段,开始学mysql,技术有限,没能实现

最后,想到这个方法:
两个表中都有年和表字段,将这两个字段拼成字符串,形成一个标志,然后用not in 即可查出submit中不包含tabletouser中数据的记录

SELECT DISTINCT tab_id,DATE_FORMAT(t.`time`,'%Y') FROM tzb_submit t WHERE LEFT(t.`submit_id`,7) NOT IN (SELECT CONCAT(a.`year`,LPAD(a.`table_id`,3,0)) submit_id FROM tabletouser a)
    

字符串格式化

    LPAD(a.`table_id`,3,0)《LPAD(str,length,str)》 从a.`table_id`的左边添加0,直到字符长度为3,如果本身超过3,则从左截取3个长度  3--》003       12-》012

字符串合并
    CONCAT(str,str,..)合并两个字符串 2014+ 003——》2014003

字符串截取
    LEFT(t.`submit_id`,7)从t.submit_id的左边开始截取7位长度,2014003002-》2014003

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值