【问题标题】:MYSQL: Selecting value in column where column name is defined on a seperate tableMYSQL:在单独的表上定义列名的列中选择值
【发布时间】:2016-06-20 12:33:18
【问题描述】:

我不确定这是否可能仅使用 SQL...任何帮助将不胜感激:

我正在尝试检索表 B (tblProduct) 中的列中的值。 列名实际上是在引用表A(tblConfig_Group)中定义的。

所以,本质上,我获得了 tblConfig_Group.groupCode 和 tblProduct.VCI

我需要在 dbColumnUK 中设置的 tblProduct 中的相应列中检索值

tblConfig_Group:

+----+-----------+-------------+
| id | groupCode | dbColumnUK  |
+----+-----------+-------------+
| 01 | A         | WindowGBP_A |
| 02 | B         | WindowGBP_B |
| 03 | C         | WindowGBP_C |
| 04 | D         | WindowGBP_D |
+----+-----------+-------------+

tblProduct:

+----+---------+-------------+-------------+-------------+-------------+
| id | VCI     | WindowGBP_A | WindowGBP_B | WindowGBP_C | WindowGBP_D |
+----+---------+-------------+-------------+-------------+-------------+
| 01 | vci1    | 1           | 11          | 21          | 31          |
| 02 | vci2    | 2           | 12          | 22          | 32          |
| 03 | vci3    | 3           | 13          | 23          | 33          |
| 04 | vci4    | 4           | 14          | 24          | 34          |
+----+---------+-------------+-------------+-------------+-------------+

【问题讨论】:

  • 嗨 Jocelyn sql 离解决方案还很远。我需要先了解按变量选择列在技术上是否可行...` SELECT cg.dbColumnUK, p.VCI, p.dbColumnUK FROM tblConfig_Group cg, tblProduct p WHERE cg.groupCode = B AND cg.dbColumnUK = p.dbColumnUK 和 p.VCI = 'vci2'; `
  • 是的,我想我能做到。
  • 规范你的设计

标签: mysql dynamic columnname


【解决方案1】:

您可以使用如下查询:

SELECT CASE g.dbColumnUK 
          WHEN 'WindowGBP_A' THEN p.WindowGBP_A
          WHEN 'WindowGBP_B' THEN p.WindowGBP_B
          WHEN 'WindowGBP_C' THEN p.WindowGBP_C
          WHEN 'WindowGBP_D' THEN p.WindowGBP_D
       END AS col
FROM tblProduct AS p
CROSS JOIN (SELECT dbColumnUK FROM tblConfig_Group WHERE groupCode='A') AS g 
WHERE VCI = 'vci2'

Demo here

【讨论】:

  • 感谢 Giorgos,这是一个不错的解决方案,但我担心最终用户会增加组列表,因此无法进行硬编码。
  • @nads 在这种情况下,我建议考虑重新设计数据库的架构。
  • 感谢 Giorgos,注意到了。
猜你喜欢
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
相关资源
最近更新 更多