使用 find_in_set从 1 行中选择包含值的列


Select column containing value from 1 row using find_in_set

我有一个有很多行和列的表。我想找到包含某个值的列,但当 ID=7 时只搜索 1 行。

以下表达式的正确编写方法是什么?

SELECT *   
FROM mytable
WHERE FIND_IN_SET(400, list_column)
WHEN ID=7;

谢谢。

您不能以您建议的形式执行此操作。

在单个查询中显示包含400的列的最佳方法是使用CASE或类似,每个受测列一个大小写。例如:

SELECT CASE
   WHEN col1=400 THEN 'col1'
   WHEN col2=400 THEN 'col2'
   WHEN col3=400 THEN 'col3'
   ...
   ELSE 'Not found'
END CASE
FROM mytable
WHERE id=7
可以使用

动态 SQL(或 PHP 等效项)来执行此操作,使用 INFORMATION_SCHEMA 查询从表中读取所有列,并在第二个查询(如上面的查询)中使用这些列。

但是,我猜您要这样做的原因是您的表不是第一范式,并且您在列中存储了重复值。您可能希望查找第一个范式表单,以查看是否确实如此,以及是否应该重新设计数据库以避免此问题和其他问题。