mysql - 将两个视图合二为一?
问题描述
大家下午好
我是 mySQL 的新手。我的一切都按我的意愿工作,但我只能通过创建第一个视图,然后在最终视图中引用它来实现我想要的。我想知道这是否是不好的做法,是否会导致性能下降?而且,只是为了学习是否可以通过使用单个视图来完成。我已经尝试过,但不断收到错误。
首先我创建了这个视图,我称之为中间视图:
CREATE VIEW intermediate_view AS (
SELECT
freight,
shipping_date,
receiver,
tracking_no,
left(cast(receiver as int), 3) as vendor_id,
DATEDIFF(now(),shipping_date) AS days_in_transit,
CASE
WHEN DATEDIFF(now(),shipping_date) > 5 then "Problem"
WHEN DATEDIFF(now(),shipping_date) < 0 then "Not shipped yet"
ELSE "In transit"
END
AS Status
FROM tracking
);
然后,我将创建一个最终视图,以将另一个表中的数据加入其中。我的第二种观点是
CREATE VIEW final_view AS (
SELECT
intermediate_view.freight,
intermediate_view.shipping_date,
intermediate_view.receiver,
intermediate_view.tracking_no,
intermediate_view.days_in_transit,
intermediate_view.Status,
vendors.vendor_name
FROM intermediate_view
JOIN vendors
on intermediate_view.vendor_id = vendors.vendor_id
);
基本上,第二个表所做的只是将 left(cast(receiver as int), 3) 的前 3 个数字与另一个表匹配,其中这 3 个数字具有相应的公司名称。有没有办法在一个视图中加入这个?
希望我已经解释得足够好!提前致谢
解决方案
你的演员在 MySQL 中不起作用,所以使用这个
CREATE VIEW final_view AS (
SELECT
t.freight,
t.shipping_date,
t.receiver,
t.tracking_no,
left(cast(t.`receiver` as UNSIGNED), 3) as vendor_id,
DATEDIFF(now(),t.shipping_date) AS days_in_transit,
CASE
WHEN DATEDIFF(now(),t.shipping_date) > 5 then "Problem"
WHEN DATEDIFF(now(),t.shipping_date) < 0 then "Not shipped yet"
ELSE "In transit"
END
AS 'Status',
v.vendor_name
FROM tracking t JOIN
vendors v
on left(cast(t.`receiver` as UNSIGNED), 3) = v.vendor_id
);
推荐阅读
- scala - Spark 中的 XGBoost 模型 --> 缺失值处理
- forms - 如何执行两个输入只需按下一个
- powershell - Powershell启动进程找不到文件
- java - Webflux,如何拦截请求并添加新标头
- sql - 查找具有特定列名 + 值小于 X 的所有表
- powerbi - Power BI - 为日期 1、日期 2..date n 添加列/筛选器,其中 n 是两个日期之间的天数
- javascript - 从axios请求中获取数据
- ios - 反应原生 ios 处理推送通知而不点击通知
- c - Fortran/C 互操作性将结构从 Fortran 传递到 C 与可分配对象
- reactjs - 安装 sass 到 React 项目