gpt4 book ai didi

mysql - 连接表将行列为连接到另一个表的列?

转载 作者:太空宇宙 更新时间:2023-11-03 12:19:48 26 4
gpt4 key购买 nike

我有 3 个表 - things、defs 和 info(糟糕的名称,但为了简单起见大大减少了!)

信息

CREATE TABLE `info` (
`id` bigint(10) NOT NULL AUTO_INCREMENT,
`thingid` bigint(10) NOT NULL DEFAULT '0',
`defid` bigint(10) NOT NULL DEFAULT '0',
`data` longtext NOT NULL,
PRIMARY KEY (`id`),
KEY `infodata_coufie_ix` (`thingid`,`defid`)
);

id | thingid | defid | data
1 | 1 | 1 | 1
1 | 1 | 2 | 25
1 | 2 | 1 | 0
1 | 2 | 3 | yellow
1 | 3 | 1 | 0

定义

CREATE TABLE `defs` (
`id` bigint(10) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`datatype` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
);

id | name | datatype
1 | enabled | boolean
2 | size | numeric
3 | colour | string

东西

CREATE TABLE `things` (
`id` bigint(10) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
);

id | name
1 | bill
2 | terry
3 | nancy

我希望能够显示“things”的“defs”值,因此生成的表/ View 类似于

thingid | name   | enabled   | size   | colour
1 | bill | true | 25 | null
2 | terry | false | null | yellow
3 | nancy | true | null | null

因此 defs 中的行将成为列标题;与 thingid 的列标题匹配的值将构成这些行的数据。

我很久以前就在 SQL Server 中做过这件事,但我记不得怎么做了。我现在需要在 MySql5 中完成它。我一直在上下阅读http://www.artfulsoftware.com/infotree/queries.php和各种 SE 文章,但我现在已经把自己弄糊涂了,所以我不得不问问别人。

最佳答案

SELECT i.thingid, t.name,
MAX(IF(d.name = "enabled", i.data, NULL)) enabled,
MAX(IF(d.name = "size", i.data, NULL)) size,
MAX(IF(d.name = "colour", i.data, NULL)) colour
FROM info i
JOIN defs d ON i.defid = d.id
JOIN things t ON i.thingid = t.id
GROUP BY i.thingid

DEMO

关于mysql - 连接表将行列为连接到另一个表的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20623866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com