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

时间:2012-11-13 14:02:44

标签: mysql sql row

在我的表中,我需要搜索特定行中的特定列,以查找哪个列包含我定义的值。

例如在我的表格中

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)。

2 个答案:

答案 0 :(得分:3)

使用一系列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

答案 1 :(得分:0)

您想要列的名称吗?

您可以使用嵌套的if例如

select if(Col4 = 'B', 'Col4', if(Col5 = 'B', 'Col5', if(Col6 = 'B', 'Col6', NULL)))
from table where ID = 2