You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL IN运算符匹配拼接后的News_Code与News_Digits组合

正确匹配拼接代码与表中字段组合的SQL实现

表结构(tblNews)

IDNews_CodeNews_Digits
1GBX400
2NXC670
3LBO880

问题说明

我有若干形如'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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:13:31