如何使用两个表中的数据创建视图

Posted

技术标签:

【中文标题】如何使用两个表中的数据创建视图【英文标题】:How to create a view using data from two tables 【发布时间】:2021-04-11 16:44:49 【问题描述】:

我有两张桌子

项目

id (int), 模型(varchar), 重量(浮动), fk_type (int)

类型

id (int), 名称(varchar)

我想创建一个视图

TypeName(对于每个类型名称)--> varchar NumberOfItems(TypeName 的项目总数)---> int NumberOfModels(TypeName 的模型总数)---> int TotWeight(同样是每个 TypeName 的所有 ITEMS 重量的总和)--->float

例如:我有三支铅笔,其中两支型号相同,一支橡皮。我期待得到这样的东西。

TypeName NumberOfItems NumberOfModels TotWeight
pencil 3 2 50
rubber 1 1 25

我尝试过这样的事情,但我无法理解它

SELECT 
    Type.Name,
    (SELECT DISTINCT COUNT(Item.fk_Type) FROM Item GROUP BY  Item.fk_Type) NumberOfItems, 
    (SELECT COUNT(Item.Model) FROM Item,Type WHERE Item.fk_Type = Type.Id)NumberOfModels ,
    (SELECT SUM(Item.Weight) FROM Item,Type WHERE Item.fk_Type = Type.Id)TotWeight
FROM 
    Item, Type 
GROUP BY 
    Type.Name 

有人可以帮忙吗?

【问题讨论】:

Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(近 30 年前),不鼓励使用它 【参考方案1】:

这基本上是一个带有join 的聚合查询:

select t.name, count(i.id) as num_items,
       count(distinct i.model) as num_models,
       sum(i.weight) as total_weight
from type t left join
     item i
     on i.fk_type = t.id
group by t.name;

【讨论】:

【参考方案2】:

您可以使用联接

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

尝试查找正确的表名。

【讨论】:

以上是关于如何使用两个表中的数据创建视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个单独表中的两列拆分为视图中的多行?

如何创建一个存储视图数据的表 - MySQL

如何创建插入视图

mysql创建视图

oracle 创建一个传参查询视图

关于mysql视图的问题。见补充