在查询中使用字段的值作为列名

时间:2010-06-22 14:00:49

标签: mysql pass-by-reference

我正在试图找出一种方法来只获取与单位所在的操作步骤相关的特定字段。我有一个包含单位的表及其操作步骤,然后我有另一个表有一个列的表每一步。我想只拉出与该单位当前步骤相关的列。

这是我的尝试,但我似乎找不到使用操作值作为参考的方法。我的问题是我需要在子查询中匹配t1.operation值的字段而不是t1.operation的值。这有什么意义吗?

SELECT t1.*,
  (SELECT t1.operation
   FROM report_tables.roc_capacity_standards As t2
   WHERE t1.assembly=t2.part_number) As standard
FROM report_tables.resource_transactions As t1
WHERE t1.date BETWEEN '2010-06-01'
                  AND '2010-06-19'
GROUP BY job, employee
ORDER BY operation;

在线搜索后,我发现有一个人说这不可能主要是因为MySQL根据索引等不知道它是什么查询。这与动态表名有关但是我不确定它是一样的。

在这里找到了:Reference

1 个答案:

答案 0 :(得分:0)

我认为您的问题在于表格的设计,而不是您的查询。

如果我是对的,你的表看起来与此类似:

units (unit_id, current_operation, date, ...)
operations (unit_id, operation_1_value, operation_2_value, operation_3_value, ...)

这是糟糕的设计,因为它会导致像你现在这样的问题。

更好的设计是

units (unit_id, *other unit specific info* ...)
operations (operation_id, operation_name, *other general operation info*)
unit_operation (unit_id, operation_id, *operation_results, *operation_values, *date_started, *date_ended)