创建视图时如何引用t1且不新增t2列,避免employeeid重复
解决视图中重复employeeid及t1引用问题
首先修正你t2查询里的逻辑问题:GROUP BY同时包含employeeid和orderid会导致每个订单单独分组,这和你统计员工订单数、唯一客户数的需求不符,应该只按employeeid分组。
针对你要的避免视图重复出现employeeid以及引用t1且不为t2新增列的需求,解决方案如下:
- 放弃
t1.*和t2.*这种全量选列的写法,明确列出需要的字段:只保留t1中的employeeid,t2里的orderemp因为和t1的employeeid重复,直接不选取即可。 - 保持原有的表别名关联逻辑就能正常引用t1,不需要给t2新增任何额外列。
修改后的完整创建视图SQL如下:
CREATE VIEW employee_order_stats AS SELECT t1.employeeid, t1.fullname, t2.ordertaken, t2.uniquecustomercount FROM (SELECT employeeid, concat(firstname,' ',lastname) AS fullname FROM employees ) t1 JOIN ( SELECT employeeid AS orderemp, COUNT(customerid) AS ordertaken, COUNT(DISTINCT customerid) AS uniquecustomercount FROM orders GROUP BY employeeid -- 移除orderid,保证按员工维度统计 ) t2 ON t1.employeeid = t2.orderemp;
这样视图中只会保留一次employeeid列,同时完整引用了t1的字段,也没有给t2新增不必要的列。
内容的提问来源于stack exchange,提问作者APAR
相关产品推荐
相关产品推荐

