色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql多表數(shù)據(jù)實現(xiàn)行轉(zhuǎn)列

錢斌斌1年前9瀏覽0評論

MySQL多表數(shù)據(jù)實現(xiàn)行轉(zhuǎn)列,是一種將多張表中的行數(shù)據(jù)轉(zhuǎn)化為列數(shù)據(jù)的方法,常應(yīng)用于數(shù)據(jù)錄入、數(shù)據(jù)統(tǒng)計等工作中。以下是詳細(xì)的實現(xiàn)步驟:

第一步:創(chuàng)建基礎(chǔ)表

CREATE TABLE `basic` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
`name` varchar(50) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年齡',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='基礎(chǔ)表';

第二步:創(chuàng)建擴(kuò)展表

CREATE TABLE `extend` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
`basic_id` int(11) NOT NULL COMMENT '基礎(chǔ)表ID',
`attribute_key_name` varchar(50) DEFAULT NULL COMMENT '屬性名稱',
`attribute_value` varchar(50) DEFAULT NULL COMMENT '屬性值',
PRIMARY KEY (`id`),
KEY `basic_id` (`basic_id`),
CONSTRAINT `extend_basic_fk` FOREIGN KEY (`basic_id`) REFERENCES `basic` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='擴(kuò)展表';

通過以上兩張表的建立,我們建立了一個基礎(chǔ)表basic和擴(kuò)展表extend。

第三步:插入數(shù)據(jù)

INSERT INTO `basic` (`name`, `age`) VALUES ('張三', 20), ('李四', 21), ('王五', 22), ('趙六', 23);
INSERT INTO `extend` (`basic_id`, `attribute_key_name`, `attribute_value`) VALUES
(1, '性別', '男'),
(1, '學(xué)歷', '本科'),
(2, '性別', '女'),
(2, '學(xué)歷', '碩士'),
(3, '性別', '男'),
(3, '學(xué)歷', '博士'),
(4, '性別', '女'),
(4, '學(xué)歷', '本科');

我們在基礎(chǔ)表中插入了四條數(shù)據(jù),每條數(shù)據(jù)都是一個人的基本信息,然后在擴(kuò)展表中插入了每個人的性別和學(xué)歷兩個屬性和屬性值。

第四步:查詢轉(zhuǎn)化后的數(shù)據(jù)

SELECT 
b.`name`,
MAX(CASE WHEN e.`attribute_key_name` = '性別' THEN e.`attribute_value` ELSE NULL END) AS '性別',
MAX(CASE WHEN e.`attribute_key_name` = '學(xué)歷' THEN e.`attribute_value` ELSE NULL END) AS '學(xué)歷'
FROM 
basic b
JOIN 
extend e ON b.`id` = e.`basic_id`
GROUP BY 
b.`id`
ORDER BY 
b.`id` ASC;

以上查詢語句會輸出如下結(jié)果:

name性別學(xué)歷
張三本科
李四碩士
王五博士
趙六本科

通過以上步驟,我們已經(jīng)成功實現(xiàn)了將擴(kuò)展表中的行數(shù)據(jù)轉(zhuǎn)化為列數(shù)據(jù),并與基礎(chǔ)表進(jìn)行了關(guān)聯(lián)查詢。