Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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_Oracle_Left Join - Fatal编程技术网

Sql 左联接为整个列返回一个值

Sql 左联接为整个列返回一个值,sql,oracle,left-join,Sql,Oracle,Left Join,我正在对子查询中的另一个表进行左连接,我想从左连接返回的commission列只为整个commission列带来一个值,这是错误的(请参见下面的第一个查询结果)。现在,如果我在表A(查询2)之外执行左连接,那么我将得到所需的结果(请参见第二个结果集)。问题是为什么在第一个查询中,表A中的左连接不起作用 我曾尝试过在子查询/表A(查询2)之外使用左连接,效果很好,但我想了解为什么左连接在表A中不起作用 下面的查询(查询1)给出了佣金列中的重复值 Position_A1 table Sector

我正在对子查询中的另一个表进行左连接,我想从左连接返回的commission列只为整个commission列带来一个值,这是错误的(请参见下面的第一个查询结果)。现在,如果我在表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, 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 

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

Sector      Short_Expo      Commission
Energy      256             125
Industry    236             125
Financial   125             125
根据第二次查询,我得到的结果(正确)是:

问题是为什么查询1不能给出理想的结果,而查询2不能给出理想的结果。我在第一个问题中做错了什么导致了重复佣金


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

在第一个查询中,外部查询中的
WHERE
子句(
WHERE TRADE\u DATE=TO\u DATE('2019-11-01','yyyyy-MM-DD')
)正在将
左联接
转换为
内部联接
,因为不匹配的值为
NULL
,并且不匹配


通常的解决方案是在
on
子句中包含对后续表的筛选。

很难了解您打算发生的事情和实际发生的事情。当提出问题时,请记住没有其他人可以运行这些查询。如果您从查询中删除与问题不直接相关的所有内容(
交易日期
评级
c_类型
?),这会有所帮助;此外,您还需要包含一些具有代表性的示例数据,以显示您的输入、您实际得到的信息以及您期望得到的信息。您好,抱歉,我已经做了更改,我希望这对您有所帮助您的查询没有本质上的问题。在第一个查询中,首先在子查询中按扇区分组,然后在外部查询中再次进行相同的分组是非常奇怪的,但在某些情况下它是有效的。除非您展示数据模型的样子,否则我们无法真正回答您为什么没有得到预期的结果。什么在
位置\u A1
?顺序是什么?无论如何,第二个查询看起来比第一个查询干净得多。如果这显示了您期望的结果,那么问题是什么?您的第一个查询真的是您使用的查询吗?我希望它会出错,因为您的com.commission列不在com表或表A中的where子句group by.Gordon中?@Ali\M。我澄清了。
Sector      Short_Expo      Commission
Energy      256             128
Industry    236             325
Financial   125             186