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)) + '%')
我是 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)) + '%')