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_Join - Fatal编程技术网

Sql 定义不明确的左外联接列名

Sql 定义不明确的左外联接列名,sql,oracle,join,Sql,Oracle,Join,我有一个餐桌任务 select sts_id, count(*) mycount from task where sts_id in (1, 8, 39) group by sts_id; 输出: sts_id count 1 1 8 1 39 1 我还有一个临时表和一列sts\u id 看起来像这样 sts_id 1 8 39

我有一个餐桌任务

select 
   sts_id, 
   count(*) mycount 
from 
   task
where 
sts_id in (1,  8,  39)
group by sts_id;
输出:

   sts_id count
       1      1
       8      1
       39     1
我还有一个临时表和一列sts\u id 看起来像这样

      sts_id 
       1 
       8
       39
      40
      41.
我正在尝试两个表的左连接

select 
   in_list.sts_id, 
   count(*) mycount 
from 
   task
left outer join
   in_list
  on task.sts_id = in_list.sts_id 
group by sts_id;
要获得ab o/p,请执行以下操作:

1 1
8 1
39 1
40 0
41 0..

我得到一个定义不明确的列错误。

您使用的
左连接方式错误(在左侧,必须是包含所有要显示的行的表)。
Count(task.sts\u id)
在该表上没有眼的行上获取0

select 
   in_list.sts_id, 
   count(task.sts_id) mycount 
from 
   in_list
left outer join
   task
  on in_list.sts_id = task.sts_id 
 AND task.sts_id in (1, 8, 39) -- Thanks Matt.
group by in_list.sts_id;

您使用的
left join
方法错误(左侧必须是包含所有要显示的行的表)。
Count(task.sts\u id)
在该表上没有眼的行上获取0

select 
   in_list.sts_id, 
   count(task.sts_id) mycount 
from 
   in_list
left outer join
   task
  on in_list.sts_id = task.sts_id 
 AND task.sts_id in (1, 8, 39) -- Thanks Matt.
group by in_list.sts_id;

GROUP BY
子句中缺少表别名。 但是,您所需的结果表明您需要更改联接逻辑:起始表应位于\u列表中的
,而
任务应位于左外联接中:

select ...
from in_list
  left outer join task

GROUP BY
子句中缺少表别名。 但是,您所需的结果表明您需要更改联接逻辑:起始表应位于\u列表中的
,而
任务应位于左外联接中:

select ...
from in_list
  left outer join task

我通过这个问题得到了答案

select t2.sts_id, count(t.sts_id)
from task t, in_list t2
where t2.sts_id = t.sts_id(+)
group by t2.sts_id

谢谢,

我通过这个问题得到了答案

select t2.sts_id, count(t.sts_id)
from task t, in_list t2
where t2.sts_id = t.sts_id(+)
group by t2.sts_id
select 
   in_list.sts_id, 
   coalesce(count(task.sts_ID),0) mycount --changed this line
from 
   task
right outer join                          --changed this line
   in_list
  on task.sts_id = in_list.sts_id 
group by in_list.sts_id;                  -- changed this line
谢谢

select 
   in_list.sts_id, 
   coalesce(count(task.sts_ID),0) mycount --changed this line
from 
   task
right outer join                          --changed this line
   in_list
  on task.sts_id = in_list.sts_id 
group by in_list.sts_id;                  -- changed this line
原因:

  • 由于in_列表包含的数据比任务多,我们需要更改表顺序或使其成为正确的联接
  • Count将对所有记录进行计数,而不会返回您希望从任务中获得计数的结果
  • 需要合并结果,否则null count将返回null而不是0
原因:

  • 由于in_列表包含的数据比任务多,我们需要更改表顺序或使其成为正确的联接
  • Count将对所有记录进行计数,而不会返回您希望从任务中获得计数的结果
  • 需要合并结果,否则null count将返回null而不是0

@SoomSatyam尝试我的第二种方法。我改变了你的计数(*)@SoomSatyam我明白了,你有左边的人从另一边加入。尝试now@SoomSatyam任务表中是否有STSU id 40和41?如果是,您是否真的希望它被计数,因为这将计数它,除非在联接上设置另一个条件以将任务结果减少到sts_id 1,8,39@Matt看起来他想要40,410@vercelli这就是我的观点,如果他希望40和41为0,但40和41实际上存在于tasks表中,那么您需要添加和task.sts_id(1、8、39)至on状态或40和/或41将>0@SoomSatyam尝试我的第二种方法。我更改了您的计数(*)@很快,我明白了,你有左路,从另一个方向加入。试试看now@SoomSatyam任务表中是否有sts_id 40和41?如果是,您是否真的希望对其进行计数,因为这将对其进行计数,除非在联接上设置另一个条件以将任务结果减少到sts_id 1,8,39@Matt看起来他想要40,410@vercelli这就是我的观点如果他希望40和41为0,但任务表中实际存在40和41,则需要在(1、8、39)中添加和task.sts_id对于on条件或40&/0R 41将>0,您得到的错误是因为group by需要在列表中具有表别名
。sts\u ID
,但是,要获得所需的结果,您需要使左侧联接成为右侧联接,因为根据提供的示例数据,列表中的值比任务中的值多。和
合并(计数(task.Sys_ID),0)作为select中的myCount
。您获取的错误是因为group by需要在列表中具有表别名
。sts_ID
。但是,要获得所需结果,您需要使左侧联接成为右侧联接,因为根据提供的样本数据,列表中的值比任务中的值多。以及
合并(计数(任务系统ID),0)作为select中的myCount
。请使用显式联接sytax隐式联接,特别是用于外部联接,因为在这种情况下,某些rdbms(如sql server 2005+)中已对其进行了详细说明。我理解oracle与此不同,但……请使用显式联接sytax隐式联接,特别是用于此ca中的外部联接se已经在一些rdbms中被去除,比如sql server 2005+。我知道oracle是不同的,但是。。。。。