【问题标题】:Select all that have specific number选择所有具有特定数字的
【发布时间】:2018-04-08 10:59:33
【问题描述】:

我有一个 mysql 大师的问题。 我有一张这样的桌子:

| col1 | col2 | 第 1 行 |约翰 | 1,2,13,22,52 | 第 2 行 |戴夫 | 1,8,10 | 第 3 行 |玛丽亚 | 2,3,5,11 |

如何编写一个查询来检查“col2”中的特定数字。例如,我想让所有数字为“1”的行不是“13”或“11”而是“1”。所以它会返回第 1 行和第 2 行。

我试图用“LIKE %”来做到这一点,但没有成功

SELECT * FROM table WHERE col2 LIKE "%1%"

有什么建议吗?


编辑


分成两张表?

表格1 |编号 | col1 | 第 1 行 | 1 |约翰 | 第 2 行 | 2 |戴夫 | 第 3 行 | 3 |玛丽亚 | 表2 |编号 | f_id | col2 | 第 1 行 | 1 | 1 | 1 | 第 1 行 | 2 | 1 | 2 | 第 1 行 | 3 | 1 | 13 | 第 1 行 | 4 | 1 | 22 | 第 1 行 | 5 | 1 | 52 | 第 2 行 | 6 | 2 | 1 | 第 2 行 | 7 | 2 | 8 | 第 2 行 | 8 | 2 | 10 | 第 3 行 | 9 | 3 | 2 | 第 3 行 | 10 | 3 | 3 | 第 3 行 | 11 | 3 | 5 | 第 3 行 | 12 | 3 | 11 |

【问题讨论】:

  • 你不应该在一列中有多个值。它违反了normalization rules
  • 更改表结构并为每个值添加单独的column/table
  • 是的。就这样
  • FIND_IN_SET() vs IN()的可能重复

标签: mysql


【解决方案1】:

你必须使用函数FIND_IN_SET:

SELECT * FROM table WHERE FIND_IN_SET('1', col2) > 0;

如果你要使用分隔表:

SELECT *
FROM table1
JOIN table2 ON table1.id = table2.f_id
WHERE table2.col2 = 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2014-09-15
    相关资源
    最近更新 更多