我们有一张非常时髦的表格,我试图从中得到一个描述性的结果集。
该表存储紧密相关但不同的数据类型集合,并且有意义的列“名称”存储在单独的表中。我认为展示比解释更容易。
一个简化和抽象的例子:
CREATE TABLE IF NOT EXISTS `something_obscure` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`obscure_type_id` tinyint(2) NOT NULL,
`segment1` varchar(92) DEFAULT NULL,
`segment2` varchar(92) DEFAULT NULL,
`segment3` varchar(92) DEFAULT NULL,
`datetime_created` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `something_obscure`
(`id`, `obscure_type_id`, `segment1`, `segment2`, `segment3`, `datetime_created`)
VALUES
('250', 1, '123', '456', '789', '2013-05-14 10:13:44'),
('251', 2, 'abc', 'def', 'ghk', NULL),
('252', 2, NULL, NULL, 'mnop', NULL);
CREATE TABLE IF NOT EXISTS `obscure_type` (
`id` tinyint(2) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(30) NOT NULL,
`description` varchar(92) DEFAULT NULL,
`segment1` varchar(92) DEFAULT NULL COMMENT 'a LABEL/NAME for the data found in Segment1 of the Obscure table',
`segment2` varchar(92) DEFAULT NULL,
`segment3` varchar(92) DEFAULT NULL,
`datetime_created` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `obscure_type`
(`id`, `type`, `description`, `segment1`, `segment2`, `segment3`)
VALUES
(1, 'native', 'a descriptive description', 'best', 'worst', 'other'),
(2, 'alien', 'another descriptive desc', 'in', 'out', 'stationary');
最初,我希望在业务逻辑(在 php 中)中为列添加有意义的名称,但是如果我可以在我们的程序之前让 SQL 来处理它sees这个结果集,那就是awesome!
GOAL:
只是为了说明(我知道这实际上行不通),我在想类似的事情:
SELECT
data.segment1 AS type.segment1,
data.segment2 AS type.segment2,
data.segment3 AS type.segment3
FROM something_obscure AS data
JOIN pobscure_type AS type
ON data.obscure_type_id = type.id
WHERE data.obscure_type_id = 2
那会返回:
----------------------------
| in | out | stationary |
----------------------------
| abc | def | ghk |
| NULL | NULL | mnop |
----------------------------
SUMMARY:
如何为values另一张桌子的?
我们不想指定别名,我们希望别名由引用字段的值设置。那可能吗?