我想根据图中的3张表创建一个视图,请问应该怎么写?
表结构及数据如下:
```sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `dict`;
CREATE TABLE `dict` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Catagory` int(1) DEFAULT NULL,
`Desc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `dict` VALUES (1, 0, '生产日期');
INSERT INTO `dict` VALUES (2, 1, '交货日期');
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product` (
`ProductId` int(11) NOT NULL AUTO_INCREMENT,
`ProductName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`Size` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`ProductId`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `product` VALUES (1, 'P1', '123*321');
INSERT INTO `product` VALUES (2, 'P2', '789*987');
DROP TABLE IF EXISTS `productdetails`;
CREATE TABLE `productdetails` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`ProductId` int(11) DEFAULT NULL,
`Catagory` int(1) DEFAULT NULL,
`Start` datetime(0) DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `productdetails` VALUES (1, 1, 0, '2023-03-27 13:37:01');
INSERT INTO `productdetails` VALUES (2, 1, 0, '2023-03-20 13:37:57');
INSERT INTO `productdetails` VALUES (3, 1, 0, '2023-03-18 13:38:19');
INSERT INTO `productdetails` VALUES (4, 2, 0, '2023-03-01 13:38:37');
INSERT INTO `productdetails` VALUES (5, 2, 0, '2023-03-06 13:38:54');
INSERT INTO `productdetails` VALUES (6, 1, 1, '2023-03-08 17:23:55');
INSERT INTO `productdetails` VALUES (7, 1, 1, '2023-03-09 17:24:18');
INSERT INTO `productdetails` VALUES (8, 2, 1, '2023-03-01 17:24:48');
SET FOREIGN_KEY_CHECKS = 1;
第n次生产,这个n是根据id来排的吗
第几次按"start"升序排列,我需要完整的代码,谢谢!
//st_distance 计算的结果单位是度,需要乘111195(地球半径6371000*PI/180)是将值转化为米。
SELECT
*,
(st_distance (point (lon,lat),point (116.3424590000,40.0497810000))*111195/1000 )as juli
FROM
aitu_customer
ORDER BY
juli ASC
CREATE VIEW product_view AS
SELECT p.ProductId, p.ProductName, p.Size,
MAX(CASE WHEN d.Catagory = 0 THEN d.Start END) AS '生产日期',
MAX(CASE WHEN d.Catagory = 1 THEN d.Start END) AS '交货日期'
FROM product p
LEFT JOIN productdetails d ON p.ProductId = d.ProductId
GROUP BY p.ProductId;
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
可以使用MySQL的PIVOT语句来实现行转列,创建视图的语句如下:
CREATE VIEW product_details_view AS
SELECT ProductId, ProductName, Size,
MAX(CASE WHEN Catagory = 0 AND `Desc` = '生产日期' THEN Start END) AS Product_Date,
MAX(CASE WHEN Catagory = 1 AND `Desc` = '交货日期' THEN Start END) AS Delivery_Date
FROM product
JOIN productdetails ON product.ProductId = productdetails.ProductId
JOIN dict ON productdetails.Catagory = dict.Catagory
GROUP BY ProductId;
这个视图将会屏蔽掉原来的表结构,建议在创建视图之前备份原来的表。
如果我的回答解决了您的问题,请采纳!