SQL Server:内部连接字符串,如果具有int ID的数字

问题描述 投票:0回答:1

是否有一种方法可以通过查询获得行,其中内部联接将一串数字与一个整数进行比较?整数是一个ID,数字字符串是该整数的ID,但采用字符串形式。

查询:

SELECT
    CT.ID, CEX.ID AS IDFiled, CAT.Name, CAT.ID AS IDCat 
FROM
    Field_Cat AS CT 
INNER JOIN 
    C_Extra AS CEX WITH(NOLOCK) ON CT.IDCampoExtra = CEX.ID 
INNER JOIN 
    Catg AS CAT WITH(NOLOCK) ON ',' + CT.IDCat + ',' LIKE CAT.ID
WHERE 
    CEX.ID = 1011

CT.IDCat = 4,8,12

我打算从CAT表中获得ID为4,8,12的行。

对于该查询,结果为空。有谁知道我该如何解决这个问题?

sql sql-server
1个回答
1
投票

一种技术解决方案是使用LIKE

ON CONCAT(',', CT.IDCat, ',') LIKE CONCAT('%,', CAT.ID, ',%')

但是,真正的答案是修复您的数据模型。不好的原因如下:

  • 数字应存储为数字。
  • ID应该具有正确声明的外键关系。
  • 除非您使用的是JSON或XML,否则一列中只能存储一个值。
  • SQL Server具有糟糕的字符串处理功能。
  • SQL通常具有一种存储列表的好方法。它称为table,而不是string
© www.soinside.com 2019 - 2024. All rights reserved.