SQL - 使用需要解析的密钥加入 table

SQL - JOINING to table with a key that requires parsing

我是 SQL 服务器的新手。我试图对 table 进行查询,其中包含带有位置过滤器(多个位置)的用户列表。下面是 table.

用户数据table:

firstname   lastname    LocFilter
-----------------------------------------------------------
Riswan      Parambath   Lo_ID=251
Reda        Dridi       Lo_ID=733 or Lo_ID=758 or Lo_ID=783

位置table:

LocID   LocationName
-----------------------
251     Qatar
733     Turkmenistan
758     Brunei
773     Iraq North
783     Iraq South

现在我正在尝试使用内部联接查询 table 以使用以下代码获取国家/地区名称

SELECT 
    SecUsers.firstname, 
    Location.LocationName
FROM 
    SecUsers
INNER JOIN 
    Location on SecUsers.LocFilter = Location.LocID

但我收到错误消息:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value 'Lo_ID=962' to data type int.

如果有人能帮助解决这个问题就太好了。

SQL 不是这样的。您不想将条件存储为字符串。

相反,您需要两个单独的 tables:

Users:

UserId   FirstName   LastName
   1     Riswan      Parambath
   2     Reda        Dridi

UserLocations:

UserLocationId   UserId   LocationId
      1             1        251
      2             2        733
      3             2        758
      4             2        783

后者table被称为连接点table(有时也称为关联table).您的查询将更快、更容易构建。

在单个单元格中包含三个规则违反了正常形式。从您的线程中,我可以将其视为已经存在的 table。因此,我提供了以下可以解决您的异常的解决方案。但是,您必须更改 table 可扩展解决方案的设计。

select Distinct
    Users.firstname, 
    Location.LocationName
from 
    SecUsers
inner join 
    Location on SecUsers.LocFilter like ('%Lo_ID=' + CAST(Location.LocID as VARCHAR(5)) + '%')