左连接为整个列返回一个值

我正在对子查询中的另一个表进行左连接,而我想从左连接返回的佣金列仅为整个佣金列带来一个值,这是错误的(请参阅下面的第一个查询结果)。现在,如果我在表A之外进行左联接(查询2),那么我将获得所需的结果(请参阅第二个结果集)。问题是为什么左联接在第一个查询中的表A中不起作用。

我尝试了在子查询/表A(查询2)之外进行左联接,它工作正常,但我想了解为什么左联接在表A中不起作用。

下面的查询(查询1)在佣金列中给出重复的值

Position_A1 table

Sector      Short_Side
------------------------
Engineering  -2
Financial    -5
Industry     -10
Corporate    -36    
Energy       -52
Financial    -26

Order table

Sector      Commission
------------------------
Engineering  10
Financial    100
Industry     36
Corporate    91 
Energy       10
Financial   25

查询1

SELECT *   
FROM
(SELECT POS.SECTOR,SUM(ABS(POS.SHORT_SIDE)) AS Short_Expo,COM.COMMISSION
FROM Position_A1 POS

LEFT JOIN (SELECT SECTOR,sum(COMMISSION) AS COMMISSION
            FROM ORDER
            WHERE TRADE_DATE = TO_DATE('2019-11-01','YYYY-MM-DD')
            GROUP BY SECTOR 
            )COM
            ON POS.SECTOR = COM.SECTOR 

WHERE TRADE_DATE = TO_DATE('2019-11-01','YYYY-MM-DD')
GROUP BY SECTOR ) A

但是,如果我尝试以下操作,我会在“佣金”列中获得正确的结果。

查询2

SELECT A.*,COM.COMMISSION   
FROM
(SELECT POS.SECTOR,SUM(ABS(POS.SHORT_SIDE)) AS Short_Expo       
FROM Position_A1 POS

WHERE TRADE_DATE = TO_DATE('2019-11-01','YYYY-MM-DD')
GROUP BY SECTOR ) A

LEFT JOIN (SELECT SECTOR,'YYYY-MM-DD')
            GROUP BY SECTOR 
            )COM
            ON POS.SECTOR = COM.SECTOR 

根据第一个查询,我得到的结果是:

Sector      Short_Expo      Commission
Energy      256             125
Industry    236             125
Financial   125             125

根据第二个查询,我得到的结果(正确)是:

Sector      Short_Expo      Commission
Energy      256             128
Industry    236             325
Financial   125             186

问题是为什么查询中的查询结果不理想,而查询2中的查询结果却理想。为什么在第一个查询中会导致重复的佣金呢?

使用第一个似乎所有部门都只返回一个部门(金融)的佣金。

whxdhrwhxdhr 回答:左连接为整个列返回一个值

在第一个查询中,外部查询(WHERE)中的WHERE TRADE_DATE = TO_DATE('2019-11-01','YYYY-MM-DD')子句将LEFT JOIN变成INNER JOIN,因为不匹配的值是{{ 1}},它们不匹配。

通常的解决方案是在NULL子句中包括对后续表的过滤。

本文链接:https://www.f2er.com/3165674.html

大家都在问