繁体   English   中英

在特定的mySQL行中,找到具有匹配值的列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM