SQL Server视图表未加入

时间:2017-06-11 06:25:16

标签: sql sql-server sql-server-2014

我对SQL非常陌生,我正在尝试为比萨商店数据库创建一个视图。双方订购了表格,并且双方名称表必须是分开的,但需要一个将它们组合在一起的视图。

这是我输入的代码,

CREATE VIEW ordered_sides_view 
AS
    SELECT 
        ordered_side_id, side.side_id, side_name, number_ordered, 
        SUM(number_ordered * price) AS 'total_cost'
    FROM 
        ordered_side 
    FULL JOIN 
        side ON ordered_side.side_id = side.side_id
    GROUP BY 
        ordered_side_id, side.side_id, side_name, number_ordered;

问题是这是结果表。

视图表的屏幕截图:

Screenshot

如何获得与有序边相匹配的名称?

1 个答案:

答案 0 :(得分:0)

您无法理解FULL JOININNER JOIN操作的作用。

  • FULL JOIN至少返回每个表中的每一行(加上ON子句中的任何额外值。)
  • INNER JOIN仅根据ON子句返回匹配的行集。
  • OUTER JOIN会返回OUTER JOIN所在的联接一侧的所有匹配行集PLUS(LEFT OUTER JOIN vs RIGHT OUTER JOIN)。

在您的图片中,您可以清楚地看到表ordered_sideside中没有匹配的行......

Problem Query

这就是为什么切换到INNER JOIN会返回零行... COLUMNS您选择使用时没有匹配。

为什么在SELECT运算符中有这个:

SELECT ordered_side_id, side.side_id, side_name, number_ordered, 

虽然你的ON子句有这个:

side ON ordered_side.side_id = side.side_id

ordered_side_id!= ordered_side.side_id

调查您的列并修复您的JOIN子句以匹配正确的列。

  

P.S。我喜欢你构建查询的方式。非常好,什么的   专家呢!它使阅读更容易,更容易。 :)

     

我可能会添加的一个建议是在SELECT语句中的列中构建自己的行:

SELECT ordered_side_id
     , side.side_id
     , side_name
     , number_ordered
     , SUM(number_ordered * price) AS Total_Cost --or written [Total_Cost]/'Total_Cost'
FROM ordered_side
FULL JOIN side ON ordered_side.ordered_side_id = side.side_id
GROUP BY ordered_side_id
       , side.side_id
       , side_name
       , number_ordered;