如何用SQL IN运算符匹配拼接后的News_Code与News_Digits组合
正确匹配拼接代码与表中字段组合的SQL实现
表结构(tblNews)
| ID | News_Code | News_Digits |
|---|---|---|
| 1 | GBX | 400 |
| 2 | NXC | 670 |
| 3 | LBO | 880 |
问题说明
我有若干形如'LBX 345'、'NXC 670'的拼接代码,需要验证这些代码是否与tblNews表中的News_Code和News_Digits字段组合匹配。之前尝试的SQL仅判断了News_Code字段,未同时匹配数字部分,错误语句如下:
SELECT * FROM tblNews WHERE News_Code IN ('LBX 345', 'NXC 670')
以下是几种正确的实现方式:
方法一:多组条件匹配
直接将每个拼接代码拆分为News_Code和News_Digits,用OR组合多组匹配条件,适合固定少量的拼接代码:
SELECT * FROM tblNews WHERE (News_Code = 'LBX' AND News_Digits = 345) OR (News_Code = 'NXC' AND News_Digits = 670)
方法二:行值匹配(部分数据库支持)
如果你的数据库支持行构造器(如MySQL、PostgreSQL、SQL Server 2022+),可以用更简洁的行值匹配语法:
SELECT * FROM tblNews WHERE (News_Code, News_Digits) IN (('LBX', 345), ('NXC', 670))
方法三:动态拆分拼接字符串(适合批量处理)
如果需要处理大量动态传入的拼接字符串,可以先拆分这些字符串为临时数据集,再关联原表查询。
SQL Server 示例
-- 先将拼接字符串转为拆分后的临时数据集 WITH SplitCodes AS ( SELECT LEFT(code, CHARINDEX(' ', code) - 1) AS News_Code, CAST(RIGHT(code, LEN(code) - CHARINDEX(' ', code)) AS INT) AS News_Digits FROM (VALUES ('LBX 345'), ('NXC 670')) AS c(code) ) -- 关联原表获取匹配记录 SELECT t.* FROM tblNews t JOIN SplitCodes s ON t.News_Code = s.News_Code AND t.News_Digits = s.News_Digits
MySQL 示例
WITH SplitCodes AS ( SELECT SUBSTRING_INDEX(code, ' ', 1) AS News_Code, CAST(SUBSTRING_INDEX(code, ' ', -1) AS UNSIGNED) AS News_Digits FROM (SELECT 'LBX 345' AS code UNION ALL SELECT 'NXC 670') AS c ) SELECT t.* FROM tblNews t JOIN SplitCodes s ON t.News_Code = s.News_Code AND t.News_Digits = s.News_Digits
内容的提问来源于stack exchange,提问作者TechGuy
相关产品推荐
相关产品推荐

