Sql 如何显示库存don';你不能下订单吗?

Sql 如何显示库存don';你不能下订单吗?,sql,oracle11g,Sql,Oracle11g,LOST STARTS相册未在QTY_ORDERALBUM中下单,因此它给我空值,我想退回相册的库存 以下是我的问题: SELECT G_ALBUM.ALBUM_NAME, G_ALBUM.ALBUM_QTY - (SUM(G_ORDERALBUM.QTY_ORDERALBUM)) AS STOCK_LEFT FROM G_ALBUM INNER JOIN G_ARTIST ON G_ALBUM.ARTIST_ID = G_ARTIST.AR

LOST STARTS相册未在QTY_ORDERALBUM中下单,因此它给我空值,我想退回相册的库存

以下是我的问题:

SELECT    G_ALBUM.ALBUM_NAME,
          G_ALBUM.ALBUM_QTY - (SUM(G_ORDERALBUM.QTY_ORDERALBUM)) AS STOCK_LEFT
FROM      G_ALBUM 
INNER JOIN G_ARTIST
ON        G_ALBUM.ARTIST_ID = G_ARTIST.ARTIST_ID
FULL OUTER JOIN G_ORDERALBUM
ON        G_ALBUM.ALBUM_ID = G_ORDERALBUM.ALBUM_ID
WHERE     ARTIST_NAME= '&ARTIST_NAME' 
GROUP BY  G_ALBUM.ALBUM_NAME, 
          G_ALBUM.ALBUM_QTY,
          G_ORDERALBUM.QTY_ORDERALBUM;

我只是想办法。本质上,您的问题是,您正在尝试对返回null的列求和,因此您的null问题不是一个值,而是一个状态,因此您无法对其进行数学运算

请按以下方式尝试查询:

SELECT G_ALBUM.ALBUM_NAME,
       G_ALBUM.ALBUM_QTY - (SUM(NVL(G_ORDERALBUM.QTY_ORDERALBUM,0))) AS STOCK_LEFT
  FROM G_ALBUM
          INNER JOIN G_ARTIST
            ON G_ALBUM.ARTIST_ID = G_ARTIST.ARTIST_ID
          LEFT JOIN G_ORDERALBUM
            ON G_ALBUM.ALBUM_ID = G_ORDERALBUM.ALBUM_ID
 WHERE G_ARTIST.ARTIST_NAME='&ARTIST_NAME' 
 GROUP BY G_ALBUM.ALBUM_NAME, 
          G_ALBUM.ALBUM_QTY;
NVL函数将空值转换为0。此查询应返回您:

   Big World               0
   Lost Stars              10
   These Old Traditions    5
因此,对于提供的插入,您有以下数据(仅针对ID):

“左联接”操作将为您提供以下组合:

1003 - 1003
1003 - 1003
1003 - 1003
1025 - 1025
1024 - NULL
如您所见,上一个注册表在表G_ORDERALBUM中没有对应的行,因此您的
SUM(G_ORDERALBUM.QTY_ORDERALBUM)
正在对该行执行
SUM(NULL)

将NULL/空值转换为给定参数


因此,当
G_ORDERALBUM.QTY_ORDERALBUM
的结果对于
1024
ID为空时,NVL将用0替换它,这将与您的数学运算配合使用。

您希望它返回什么?您可以设置一个小数据样本,并从中返回什么吗?嗯,为什么要使用
完全外部联接
而不是简单的左联接呢?好的,我将为您准备给定的设置,并尝试查看它的错误。不过,您应该将此设置添加到问题中。编辑一下就行了。然后删除你的评论。我想我只是找到了问题所在,当然这取决于你的表是如何创建的。根据您的insert语句,QTY_ORDERALBUM是一个varchar,您正在其上使用SUM函数。是这样吗?你需要把它编号正确,做得好,伙计,对不起,我的英语不好,让你从一开始就不知道问题出在哪里。效验如神NVL的含义是什么?可以解释(总和(NVL(G_ORDERALBUM.QTY_ORDERALBUM,0))?最后,我回归了这些古老传统的价值。谢谢你!我会为NVL添加一点解释。完成,希望你理解。正确,现在我理解了,没关系,你给出了很好的解释,并清楚地说明了我想问的问题,感谢你的解释和分享知识。加油~~~~我的查询有效!非常感谢。
1003 - 1003
1003 - 1003
1003 - 1003
1025 - 1025
1024 - NULL