我有一个包含以下字段的表:
current_field
field_1
field_2
field_3
...etc...
current_field包含要选择的字段的名称。
如果current_field包含“ field_23”,我将如何构造select语句来选择current_field和field_23?
答案 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_id
,current_field
fields
表,其中包含entity_id
,field_name
,field_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;