Sql server 将多个ID存储到一列中

Sql server 将多个ID存储到一列中,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,其主要思想是将区域中的多个ID存储到一列中。范例 Area A id=1 Area B id=2 我想知道是否有可能将我的客户可以服务的区域保存到一列中。 例如,如果我的客户可以将这两种服务存储到一个列中,我可以想象如下: ColumnArea 1,2 //....or whatever area can service 然后,如果包含此id,我希望使用SQL查询检索此客户 Select * from customers where ColumnArea=1 有什么技巧或想法可以做到这

其主要思想是将区域中的多个ID存储到一列中。范例

Area A  id=1
Area B  id=2
我想知道是否有可能将我的客户可以服务的区域保存到一列中。 例如,如果我的客户可以将这两种服务存储到一个列中,我可以想象如下:

ColumnArea
1,2 //....or whatever area can service
然后,如果包含此id,我希望使用SQL查询检索此客户

Select * from customers where ColumnArea=1

有什么技巧或想法可以做到这一点吗?

你真的不应该这么做。
在一列中存储多个数据点是一种糟糕的设计。 要获得详细的解释,请阅读,在这里你会看到很多原因,为什么这个问题的答案是绝对是

在这种情况下,您要做的是创建一个新表,并与现有表建立关系。在这种情况下,您可能需要一个多对多关系,因为很明显,一个客户可以为多个区域提供服务,我假设一个区域可以由多个客户提供服务

多对多关系是通过连接两个包含数据的表和另一个包含数据之间连接的表(又称桥接表)生成的。表之间的所有直接关系都是一对一或一对多的关系,并且存在桥接表的事实允许两个数据表之间的关系是多对多关系

因此,您需要的数据库结构如下所示:

Customers Table
    CustomerId (Primary key)
    FirstName
    LastName
    ... Other customer related data here

Areas Table
    AreaId (Primary key)
    AreaName
    ... Other area related data here

CustomerToArea table
    CustomerId
    AreaId
    (Note: The combination of both columns is the primary key here)
SELECT C.*
FROM Customers AS C
WHERE EXISTS
(
    SELECT 1
    FROM CustomerArea As CA
    WHERE CA.CustomerId = C.CustomerId
    AND AreaId = 1
)
然后,您可以选择区域1的客户,如下所示:

Customers Table
    CustomerId (Primary key)
    FirstName
    LastName
    ... Other customer related data here

Areas Table
    AreaId (Primary key)
    AreaName
    ... Other area related data here

CustomerToArea table
    CustomerId
    AreaId
    (Note: The combination of both columns is the primary key here)
SELECT C.*
FROM Customers AS C
WHERE EXISTS
(
    SELECT 1
    FROM CustomerArea As CA
    WHERE CA.CustomerId = C.CustomerId
    AND AreaId = 1
)

你真的不应该那样做。
在一列中存储多个数据点是一种糟糕的设计。 要获得详细的解释,请阅读,在这里你会看到很多原因,为什么这个问题的答案是绝对是

在这种情况下,您要做的是创建一个新表,并与现有表建立关系。在这种情况下,您可能需要一个多对多关系,因为很明显,一个客户可以为多个区域提供服务,我假设一个区域可以由多个客户提供服务

多对多关系是通过连接两个包含数据的表和另一个包含数据之间连接的表(又称桥接表)生成的。表之间的所有直接关系都是一对一或一对多的关系,并且存在桥接表的事实允许两个数据表之间的关系是多对多关系

因此,您需要的数据库结构如下所示:

Customers Table
    CustomerId (Primary key)
    FirstName
    LastName
    ... Other customer related data here

Areas Table
    AreaId (Primary key)
    AreaName
    ... Other area related data here

CustomerToArea table
    CustomerId
    AreaId
    (Note: The combination of both columns is the primary key here)
SELECT C.*
FROM Customers AS C
WHERE EXISTS
(
    SELECT 1
    FROM CustomerArea As CA
    WHERE CA.CustomerId = C.CustomerId
    AND AreaId = 1
)
然后,您可以选择区域1的客户,如下所示:

Customers Table
    CustomerId (Primary key)
    FirstName
    LastName
    ... Other customer related data here

Areas Table
    AreaId (Primary key)
    AreaName
    ... Other area related data here

CustomerToArea table
    CustomerId
    AreaId
    (Note: The combination of both columns is the primary key here)
SELECT C.*
FROM Customers AS C
WHERE EXISTS
(
    SELECT 1
    FROM CustomerArea As CA
    WHERE CA.CustomerId = C.CustomerId
    AND AreaId = 1
)