我对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;
问题是这是结果表。
视图表的屏幕截图:
如何获得与有序边相匹配的名称?
答案 0 :(得分:0)
您无法理解FULL JOIN
和INNER JOIN
操作的作用。
FULL JOIN
至少返回每个表中的每一行(加上ON
子句中的任何额外值。)INNER JOIN
仅根据ON
子句返回匹配的行集。OUTER JOIN
会返回OUTER JOIN
所在的联接一侧的所有匹配行集PLUS(LEFT OUTER JOIN
vs RIGHT OUTER JOIN
)。在您的图片中,您可以清楚地看到表ordered_side
和side
中没有匹配的行......
这就是为什么切换到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;