让我们将下表视为一个玩具示例:
id / to / status
1 / steve,jimmy / 0,2
2 / john,julia / 1,2
3 / julia,peggy / 0,1
我想获取“Julia”在“to”中的行以及她相应的“status”为“0”的行。
在这个简单的示例中,即第 n°3 行。
如何在 SQL 中编写这样的查询?
PS:我正在使用 SQLite。
SQLite 不包含用于操作嵌入在单个列中的逗号分隔列表的内置函数。其他数据库可以,但即使它们也会在您的要求方面遇到一些问题,即从一个逗号分隔字符串中获取一个值,该值与另一个逗号分隔字符串中另一个值的索引相关。
为此,您必须编写一个用户定义的 SQLite 函数,该函数接受两个列值和两个字符串值,获取第一列中第一个值的索引,从第二列中的相同索引中提取值,然后将该值与第二个指定值进行比较。
一般来说,像这样的逗号分隔字符串在关系数据库中是一个禁忌,老实说,我什至不会尝试在 SQL 中解决这个问题。如果规范化数据库结构不是一个选项,只需在代码中进行。