1

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

例如在我的桌子上

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

4

2 回答 2

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()返回列名或空字符串的 a 中。这意味着尽管使用多个单独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
于 2012-11-13T14:06:46.327 回答
0

你想要列的名称吗?

您可以使用嵌套的if例如

select if(Col4 = 'B', 'Col4', if(Col5 = 'B', 'Col5', if(Col6 = 'B', 'Col6', NULL)))
from table where ID = 2
于 2012-11-13T14:05:36.200 回答