【发布时间】:2020-11-21 18:39:54
【问题描述】:
这里是新手。如果我没有使用正确的术语,请提前道歉。
情况:我正在使用我的第一个 SQL 数据库,并且一列中的单元格有多个值,其中许多值与其他单元格重叠。这是一段摘录(我是堆栈溢出的新手,还不能插入图像,我想不出用文本表示布局的最佳方式,但这是我最好的尝试):
aardvark | animal mammal carnivore
tiger | animal carnivore mammal
snail | animal mollusk
问题:如何调用具有特定多个值组合但不一定按查询顺序的所有行?
期望结果的示例:使用上面列出的列/值,我只想提取第 2 列中同时具有“动物”和“哺乳动物”值的行(因此 row_1 和 row_2,但不是 row_3)。
失败/令人困惑的尝试示例(使用上面列出的列/值):
- 如果我这样做:
SELECT * FROMtable_nameWHERE col_name LIKE '%mammal%' AND '%animal%',则返回零行(无论是先列出 '%mammal%' 还是 '%animal%',都会发生这种情况) - 如果我执行
SELECT * FROMtable_nameWHERE col_name LIKE '%animal%' OR '%mammal%',则会返回所有三行(我预计会发生这种情况,但是...) - 如果我在使用 OR (
SELECT * FROMtable_nameWHERE col_name LIKE '%mammal%' OR '%animal%') 时切换 LIKE 条件,则仅返回第 1 行和第 2 行
SQL 是否支持这种查询?过去几天我一直在寻找解决方案,我得到的最接近的是我认为 ALL 可能与它有关,但如果是这种情况,我无法找出正确的语法。我环顾四周,发现了一些关于如何将多个列值组合到一个单元格中的文章,但没有找到如何搜索它们的文章。我考虑过重新格式化表格,以便该列每个单元格只有一个值,但这需要添加更多列来容纳所有值,而且这似乎会使搜索变得更加复杂,因为它需要搜索所有这些列,而不是只有一列。
谢谢!
【问题讨论】:
-
请阅读stackoverflow.com/questions/3653462/… amd 尝试规范化数据库,这样会更容易。如果你有固定数量的值,你可以尝试一些东西,所以你必须为此使用一个函数
-
WHERE col_name LIKE '%mammal%' AND col_name LIKE '%animal%' -
考虑规范化你的架构