Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL脚本,返回相同结果的股票_Sql_Firebird - Fatal编程技术网

SQL脚本,返回相同结果的股票

SQL脚本,返回相同结果的股票,sql,firebird,Sql,Firebird,我需要SQL脚本的帮助。我需要在dataGrid上显示一些产品的库存量,所以有两个表,一个是产品,另一个是库存,我保存所有的动作。这是我的剧本: SELECT PRO_LABEL, (SELECT SUM(STO_QUANTITY) STO_QUANTITY FROM STOCK STO LEFT JOIN PRODUCT AS PRO ON PRO.PRO_ID = STO.PRO_ID WHERE PRO.PRO_ID = STO.PRO_ID) STO_QUANTITY FROM PR

我需要SQL脚本的帮助。我需要在dataGrid上显示一些产品的库存量,所以有两个表,一个是产品,另一个是库存,我保存所有的动作。这是我的剧本:

SELECT PRO_LABEL,

(SELECT SUM(STO_QUANTITY) STO_QUANTITY FROM STOCK STO
LEFT JOIN PRODUCT AS PRO ON PRO.PRO_ID = STO.PRO_ID
WHERE PRO.PRO_ID = STO.PRO_ID) STO_QUANTITY

FROM PRODUCT AS PRO
ORDER BY PRO.PRO_ID DESC

这里的问题是所有的结果都显示了相同的库存量。每个产品都应该显示自己的库存

您在两个不同的表引用中使用了相同的别名,我认为您不需要内部引用

SELECT PRO_LABEL,

(SELECT SUM(STO_QUANTITY) STO_QUANTITY FROM STOCK STO
WHERE PRO.PRO_ID = STO.PRO_ID) STO_QUANTITY

FROM PRODUCT AS PRO
ORDER BY PRO.PRO_ID DESC

我认为您可以这样简化。

您在两个不同的表引用上使用了相同的别名,我认为您实际上不需要内部引用

SELECT PRO_LABEL,

(SELECT SUM(STO_QUANTITY) STO_QUANTITY FROM STOCK STO
WHERE PRO.PRO_ID = STO.PRO_ID) STO_QUANTITY

FROM PRODUCT AS PRO
ORDER BY PRO.PRO_ID DESC

我想你可以这样简化。

专业标签和专业ID之间的关系是什么?每个
产品
表中的
PRO_ID
是唯一的还是可以重复

坦率地说,最好让您的内部查询同时运行,而不是一次又一次地为每个ID运行上千次。不一定,但通常随着数据的增长,它的扩展性会更好。最终,在真实数据和真实“数据库模式”(包括“索引”)上读取“查询计划”将是决定性的。但如果您还没有猜测,那么最好开始使用单个数据流进行连接,而不是进行许多单行的重新查询

因此,从以下内容开始

SELECT SUM(STO_QUANTITY) AS STO_QUANTITY, PRO_ID 
FROM STOCK 
GROUP BY PRO_ID
一个查询,所有的总和都是正确的

然后您可以将其包装为
派生表
,并将其用于与
产品
s联接

SELECT PRO_LABEL, STO_QUANTITY 
FROM PRODUCT PRO, 
  ( SELECT SUM(STO_QUANTITY) AS STO_QUANTITY, PRO_ID 
    FROM STOCK STO GROUP BY PRO_ID ) AS STO_G
WHERE STO_G.PRO_ID = PRO.PRO_ID
这个查询也可以使用
CTE
s编写,更加详细和明确。这是让阅读/写作更容易还是更难是一个品味的问题。在这个简单的例子中,除了风格,实际上没有什么不同

WITH STO_G AS ( SELECT SUM(STO_QUANTITY) AS STO_QUANTITY, PRO_ID FROM STOCK STO GROUP BY PRO_ID ) 
SELECT PRO_LABEL, STO_QUANTITY 
FROM PRODUCT PRO, STO_G
WHERE STO_G.PRO_ID = PRO.PRO_ID
或者像这样(假设
产品中
PRO_ID
的唯一性):


另外,为了简单起见,我使用SQL-89样式的
内部连接。如果查询中列出了一些您需要的产品,但是
库存
中遗漏了这些产品,您必须将其转换为
外部联接
,如您在问题中所做的那样。
专业标签
专业ID
之间的关系是什么?每个
产品
表中的
PRO_ID
是唯一的还是可以重复

坦率地说,最好让您的内部查询同时运行,而不是一次又一次地为每个ID运行上千次。不一定,但通常随着数据的增长,它的扩展性会更好。最终,在真实数据和真实“数据库模式”(包括“索引”)上读取“查询计划”将是决定性的。但如果您还没有猜测,那么最好开始使用单个数据流进行连接,而不是进行许多单行的重新查询

因此,从以下内容开始

SELECT SUM(STO_QUANTITY) AS STO_QUANTITY, PRO_ID 
FROM STOCK 
GROUP BY PRO_ID
一个查询,所有的总和都是正确的

然后您可以将其包装为
派生表
,并将其用于与
产品
s联接

SELECT PRO_LABEL, STO_QUANTITY 
FROM PRODUCT PRO, 
  ( SELECT SUM(STO_QUANTITY) AS STO_QUANTITY, PRO_ID 
    FROM STOCK STO GROUP BY PRO_ID ) AS STO_G
WHERE STO_G.PRO_ID = PRO.PRO_ID
这个查询也可以使用
CTE
s编写,更加详细和明确。这是让阅读/写作更容易还是更难是一个品味的问题。在这个简单的例子中,除了风格,实际上没有什么不同

WITH STO_G AS ( SELECT SUM(STO_QUANTITY) AS STO_QUANTITY, PRO_ID FROM STOCK STO GROUP BY PRO_ID ) 
SELECT PRO_LABEL, STO_QUANTITY 
FROM PRODUCT PRO, STO_G
WHERE STO_G.PRO_ID = PRO.PRO_ID
或者像这样(假设
产品中
PRO_ID
的唯一性):


另外,为了简单起见,我使用SQL-89样式的
内部连接。如果查询中列出了一些您需要的产品,但是
库存中缺少这些产品,您必须将其转换为
外部联接
,如您在问题中所做的那样。

为什么不使用联接和分组<代码>相关子查询
通常会按比例缩放为什么不使用联接和分组<代码>相关子查询
通常缩放更差