【发布时间】:2016-06-02 21:11:25
【问题描述】:
假设我有以下两个表:
**Table A**
ID Day Month Year
------------------------
1 1 1 1900
3 13 3 2009
49 28 2 1984
**Table B**
ID ABC_1_1_1900 ABC_2_1_1900 ... ABC_31_12_2100
-------------------------------- ... ---------------
1 431 15449 98565
2
3 ....
.
.
n ....
并希望得到下表:
**Table C**
ID ABC
------------------------
1 431
3 (value B.ABC_13_3_2009 for ID=3)
49 (value B.ABC_28_2_1984 for ID=49)
基本上我想要实现的是,通过将 A 的行内容与 B 的列名匹配并在 ID 上进行内部连接来获取表 B 的子集。
相当于
SELECT A.ID, B.CONCAT('ABC_', A.Day, '_', A.Month, '_', A.Year) AS ABC
FROM A
INNER JOIN B ON A.ID=B.ID
不幸的是,这不起作用。任何想法都非常感谢!
【问题讨论】:
-
如果您的
ID是UNIQUE,那么您的INNER JOIN将带回Table B中的值。如果您只想要价值,为什么要尝试CONCAT()? -
因为我只想要表B所有列中的一个值(假设表B有数千列),它对应于表A中的内容。
-
见规范化。数据库表不是电子表格。数据类型的发明是有充分理由的。
标签: mysql sql sql-server database