如何根据SQL中另一个字段的值选择一个字段?

时间:2019-07-14 10:48:41

标签: mysql sql

我有一个包含以下字段的表:

current_field
field_1
field_2
field_3
...etc...

current_field包含要选择的字段的名称。

如果current_field包含“ field_23”,我将如何构造select语句来选择current_field和field_23?

3 个答案:

答案 0 :(得分:0)

您可以使用CASE表达式

SELECT current_field
    ,CASE current_field 
       WHEN 'field_1' THEN field_1
       WHEN 'field_2' THEN field_2
       WHEN 'field_3' THEN field_3
     END as current_value
FROM tab

答案 1 :(得分:0)

您可以使用一个巨大的case表达式:

select (case when current_field = 'field_1' then field_1
             when current_field = 'field_2' then field_2
             . . . 
        end) as current_field_value

注意:这要求所有字段值都具有相同(或兼容)的类型。

通常,这种类型的操作表明您的数据模型有问题。这不是典型的表达类型。

更好的数据模型是将其存储在两个表中,例如:

  • entities表,其中包含entity_idcurrent_field
  • fields表,其中包含entity_idfield_namefield_value

然后,您可以将逻辑表示为:

select e.*, f.*
from entities e join
     fields f
     on e.entity_id = f.entity_id
where f.field_name = e.current_field;

答案 2 :(得分:0)

MySQL提供预备语句的选项并执行。

如果您的字段 current_field 包含动态列,或者包含逗号分隔的值,则可以尝试类似的操作

CREATE TABLE fieldDemo (
    current_field VARCHAR(256), 
    field_1 VARCHAR(16), 
    field_2 VARCHAR(16), 
    field_3 VARCHAR(256)
);

INSERT INTO fieldDemo VALUES('field_2,field_3','f1','f2','f3');

SELECT current_field FROM fieldDemo INTO @t;

SET @tm = CONCAT('select ',@t, '  from fieldDemo');

PREPARE stmt FROM @tm

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

MySQL document Reference