[英]How to query for multiple values in a single cell in SQL
新手在这里。 如果我没有使用正确的术语,请提前道歉。
情况:我正在使用我的第一个 SQL 数据库,并且一列中的单元格具有多个值,其中许多值与其他单元格重叠。 这是摘录(我是堆栈溢出的新手,还不能插入图像,我无法找出用文本表示布局的最佳方式,但这是我的最佳尝试):
aardvark | animal mammal carnivore
tiger | animal carnivore mammal
snail | animal mollusk
问题:如何调用具有特定多个值组合但不一定按查询顺序排列的所有行?
预期结果示例:使用上面列出的列/值,我只想提取第 2 列中同时具有“动物”和“哺乳动物”值的行(即 row_1 和 row_2,但不是 row_3)。
失败/混淆尝试的示例(使用上面列出的列/值):
SELECT * FROM
table_name WHERE col_name LIKE '%mammal%' AND '%animal%'
,则返回零行(无论 '%mammal%' 或 '%animal%' 是否首先列出,都会发生这种情况)SELECT * FROM
table_name WHERE col_name LIKE '%animal%' OR '%mammal%'
,则返回所有三行(我预计会发生,但是...)SELECT * FROM
table_name WHERE col_name LIKE '%mammal%' OR '%animal%'
) 时切换 LIKE 条件,则只返回第 1 行和第 2 行SQL 是否支持这种查询? 过去几天我一直在寻找解决方案,我得到的最接近的是我认为 ALL 可能与它有关,但如果是这种情况,我一直无法找出正确的语法。 我环顾四周,发现了一些关于如何将多个列值组合到一个单元格中的文章,但没有找到有关如何搜索它们的文章。 我考虑重新格式化表格,以便每个单元格的列只有一个值,但这需要添加更多列来容纳所有值,而且这似乎会使搜索变得更加复杂,因为它需要搜索所有那些列而不是一列。
谢谢!
首先,您应该了解您的数据模型已损坏。 在字符串中存储多个值根本不是在数据库中存储数据的正确方法。 您应该有一个表格,每个动物和功能各占一行。
也就是说,有时我们会被其他人非常非常糟糕的决定所困。 您可以使用like
处理这种情况。 最简单的方法是:
where col_name like '%mammal%' and col_name like '%animal%'
但是,这有一个问题,因为您没有考虑分隔符 - 您可能希望“ant”与“anteater”匹配。 所以:
where concat(' ', col_name, ' ') like '% mammal %' and
concat(' ', col_name, ' ') like '% animal %'
这是一种通用方法,可以在不修改架构或数据的情况下使用任何数据库。 然而,它不会表现得很好。 (如果您的数据库支持,您也可以考虑使用 RegEx 方法。)
理想情况下,您将规范化架构,但这通常是不可能的。
要查找mammal
和carnivore
记录:
select ...
from ...
WHERE (col_name = 'mammal'
or col_name like 'mammal %'
or col_name like '% mammal %'
or col_name like '% mammal')
and (col_name = 'carnivore'
or col_name like 'carnivore%'
or col_name like '% carnivore%'
or col_name like '% carnivore')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.