Jom*_*thr 8 sql db2 join group-by
我有一个简单的查询:
select c.* , max(TLO.BILL_DATE)
from
client c
left outer join TLORDER TLO
on TLO.CUSTOMER = c.CLIENT_ID
OR TLO.ORIGIN = c.CLIENT_ID
OR TLO.DESTINATION = c.CLIENT_ID
GROUP BY c.*
Run Code Online (Sandbox Code Playgroud)
查询本身非常简单,但是客户端表包含 200 多个字段,我需要检索所有字段。
有没有办法做类似的事情
GROUP BY c.*
Run Code Online (Sandbox Code Playgroud)
或者我必须输入全部 200+ GROUP_BY 吗?
谢谢
不,您不必全部输入,因为您不需要使用group by. 相反,使用相关子查询:
select c.* ,
(select max(TLO.BILL_DATE)
from TLORDER TLO
where TLO.CUSTOMER = c.CLIENT_ID or
TLO.ORIGIN = c.CLIENT_ID or
TLO.DESTINATION = c.CLIENT_ID
)
from client c;
Run Code Online (Sandbox Code Playgroud)
如果您使用group by,那么您将必须列出所有列。请注意,在这种情况下,ANSI SQL 支持仅使用主键或唯一键。因此,这将符合 ANSI 标准:
select c.*, max(TLO.BILL_DATE)
from client c left join
TLORDER TLO
on TLO.CUSTOMER = c.CLIENT_ID or
TLO.ORIGIN = c.CLIENT_ID or
TLO.DESTINATION = c.CLIENT_ID
group by c.c_id;
Run Code Online (Sandbox Code Playgroud)
我不认为 DB2 支持这种构造,尽管其他一些数据库支持。