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是不同的,但是。。。。。