[英]In a specific mySQL row find the column with the matching value
在我的表中,我需要搜索特定行中的特定列,以查找哪个列包含我定义的值。
例如在我的表中
ID | Col1 | Col2 | Col3 | Col4 | Col5 | Col6
--------------------------------------------
1 | A | B | C | C | B | A
2 | C | B | A | A | C | B
3 | B | A | C | B | A | C
我需要一个查询来搜索第2行中的第 4列,第5列和第6 列,并告诉我哪个列值B出现(Col6)。
使用一系列CASE
条件来匹配每列的'B'
将完成这项工作。 每个必须提供列的字符串文字名称作为其THEN
值。 您无法动态确定列名称 - 它们必须是硬编码的。
SELECT
CASE
WHEN Col2 = 'B' THEN 'Col2'
WHEN Col4 = 'B' THEN 'Col4'
WHEN Col6 = 'B' THEN 'Col6'
ELSE 'Not found'
END AS which_column
FROM
yourtable
WHERE id = 2
要返回多个,可以将CASE
语句包装在返回列名或空字符串的CONCAT()
中。 这意味着使用几个单独的CASE
语句,而不是同一个案例的多个条件。
SELECT
CONCAT(
CASE WHEN col2 = 'B' THEN 'Col2 ' ELSE '' END,
CASE WHEN col4 = 'B' THEN 'Col4 ' ELSE '' END,
CASE WHEN col6 = 'B' THEN 'Col6' ELSE '' END
) AS which_columns
FROM yourtable
WHERE id = 2
你想要列的名称?
你可以使用嵌套if
例如
select if(Col4 = 'B', 'Col4', if(Col5 = 'B', 'Col5', if(Col6 = 'B', 'Col6', NULL)))
from table where ID = 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.