sql语句的问题

本文探讨了在SQL中如何实现防重插入操作,并通过模糊查询来获取数据的方法。介绍了使用INSERT...SELECT...WHERE NOT EXISTS进行防重的技巧,以及通过LIKE结合CONCAT进行模糊查询并限制结果数量的技术细节。

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

做项目遇到这样的需求:匹配设备。

原理是一张包含两种设备的id的表,在插入前先查询是否有这两个id的记录,如果有就忽略,如果没有就执行插入。

可用于防重操作。

实验过很多,

insert ignore into 由于表是同事建的,不想改表。。万一出现问题呢。。

用了not exists ,具体的语句如下:

INSERT INTO hotel_merchant(hotel_id, merchant_id)
SELECT #{hotelId}, #{merchantId} from DUAL
WHERE NOT EXISTS (
    select * from hotel_merchant h 
    where h.hotel_id=#{hotelId} AND h.merchant_id=#{merchantId}
)

然后测试的时候还出现了异常:空指针、返回是null,可写的类型是int之类的。。 结果是标签写错了。。抽自己。。

然后,今天需求升级:

先按照名字模糊查询信息前5条,前端要做成下拉框,然后根据前端选择的某一条数据得到这条数据的id值,

再与另一个id做匹配。

写了两个sql语句,一个查询,一个匹配。

SELECT * FROM merchants_info m
WHERE m.merchant_name LIKE CONCAT('%',#{merchantName},'%')
ORDER BY m.merchant_id limit 5

匹配同上。

测试的时候出现了此异常:

MyBatis Cause: java.sql.SQLException: Operand should contain 1 column(s)

网上查询都是in后面多了括号之类的。。

可是我没有括号也没有in。。

最后发现。。

在mybatis的xml文件里,like后面的参数是拼接成的。。 前面要加CONCAT函数关键字。

记录一下。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值