【问题标题】:MySql : Select statement using IN operatorMySql:使用 IN 运算符选择语句
【发布时间】:2024-10-10 03:30:01
【问题描述】:

我有一个包含多个字段的表,其中一个字段包含 3 个逗号分隔值

 Column 1 Column 2 
    1        1,2,3
    2        2,3,4
    3        6,7,8 

现在我想运行一个 SQL 查询来获取我作为输入发送的值的行。

像上面的例子一样,如果我发送一个值 2 作为函数的输入, 它必须返回前 2 行。

我尝试使用 IN 运算符但失败了,因为它没有获取我作为 CSV 的第二个或第三个值发送的输入的行。在本例中,它不返回第一行。

有人可以帮我解决这个问题吗?

提前致谢, 阿卡什

【问题讨论】:

  • 请注意:您确实意识到这是对数据库的可怕滥用?一个字段应该只包含一个值(“原子性”)。

标签: mysql select csv


【解决方案1】:

你可以使用FIND_IN_SET():

SELECT column1 FROM table WHERE FIND_IN_SET('2', column2) != 0

IN 运算符基本上是许多 OR 的快捷方式:

WHERE column2 = IN ('a', 'b', 'c')

给出与

相同的结果
WHERE (column2 = 'a' OR column2 = 'b' OR column2 = 'c')

【讨论】:

  • 非常感谢您的快速回复。
【解决方案2】:

如果我正确理解了您的问题,那么尝试一下 - 从表中选择 Column1, Column2 其中 Column1

干杯

【讨论】:

    【解决方案3】:

    您应该可以使用 Like 来执行此操作,例如:

    SELECT * FROM tablename WHERE [Column 2] LIKE ("%2%");
    

    【讨论】:

    • 这仅在所有数字都是个位数时才有效,否则它将匹配例如12 或 21
    • 是的,尽管您可以使用更复杂的模式来修复它,例如"%,2,%" 或取决于编号的工作方式仅匹配一侧的通配符。