将多个 ID 存储到一列中

Store multiple ids into one column

主要思想是将区域中的多个 id 存储到一列中。示例

Area A  id=1
Area B  id=2

我想知道是否可以将我的客户可以服务的区域保存在一栏中。 例如,如果我的客户可以为他们提供服务以存储到一列中,我想像这样:

ColumnArea
1,2 //....or whatever area can service

然后我想使用 SQL 查询来检索包含此 ID 的客户。

Select * from customers where ColumnArea=1

有没有什么技术或想法可以做到这一点?

你真的不应该那样做。
在单个列中存储多个数据点是糟糕的设计。 详细解释请阅读Is storing a delimited list in a database column really that bad?,在这里你会看到很多理由为什么这个问题的答案是绝对是!

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

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

所以你想要的数据库结构是这样的:

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 区域 1 的客户,如下所示:

SELECT C.*
FROM Customers AS C
WHERE EXISTS
(
    SELECT 1
    FROM CustomerArea As CA
    WHERE CA.CustomerId = C.CustomerId
    AND AreaId = 1
)