MYSQL,创建视图并从两个表中提取信息

时间:2017-04-17 14:57:48

标签: mysql view

好的,我有两张桌子:

hscust和hssales_rep

我需要创建一个视图,向我显示代表fname和lname(以及客户),并显示客户在信用余额上的结果。

这是我的代码:

CREATE VIEW OverLimit AS 
SELECT 
    CONCAT(hssales_rep.last,hssales_rep.first) AS Rep,     
    CONCAT(hscust.last,hscust.first) AS Cust, 
    SUM(credit_limit - balance)
FROM hscust 
INNER JOIN hssales_rep ON hscust.sales_rep = hssales_rep.repid

它返回一个空结果。

非常感谢任何帮助!

salesrep table cust table

1 个答案:

答案 0 :(得分:0)

CREATE VIEW语句不会返回结果集。

SELECT语句可以返回空结果集。但是我们希望视图定义中的SELECT语句返回单行,或者抛出错误。

我建议你稍微打破一下。

1) CREATE VIEW语句正在解决什么问题。你为什么需要一个观点?

2)在编写CREATE VIEW语句之前,首先开发并测试返回所需结果集的SELECT语句。在之前将它放入视图定义中。

我还强烈建议您使用表名或(最好)短表别名来限定SELECT语句中所有列引用。

如果要在SELECT列表中使用聚合函数(例如Cust)为每个SUM返回一行,请在GROUP BY中添加适当的SELECT子句声明。

我们不清楚为什么要使用SUM聚合函数。

" credit_limit"之间的区别和"平衡"将是可用的(剩余)信用额度。负值表示余额为"超过"信用额度。

SELECT CONCAT(r.last,r.first)      AS Rep
     , CONCAT(c.last,c.first)      AS Cust
     , c.credit_limit - c.balance  AS available_credit
  FROM hscust c
  JOIN hssales_rep r 
    ON c.sales_rep=r.repid
 ORDER
    BY CONCAT(r.last,r.first)
     , CONCAT(c.last,c.first)
     , c.custid 

如果我们只想为那些" over"他们的信用额度,我们可以添加一个WHERE子句。

SELECT CONCAT(r.last,r.first)      AS Rep
     , CONCAT(c.last,c.first)      AS Cust
     , c.credit_limit - c.balance  AS available_credit
  FROM hscust c
  JOIN hssales_rep r 
    ON c.sales_rep=r.repid
 WHERE c.credit_limit - c.balance < 0
 ORDER
    BY CONCAT(r.last,r.first)
     , CONCAT(c.last,c.first)
     , c.custid 

再次,在中将SELECT语句包装在CREATE VIEW之前,获取Book语句(返回所需的结果集)