问大家一个SQL,两个表联查,一对多,多的取最新记录
表假设是这样的
t_product
idname
——————————————————
1p_name_1
2p_name_2
3p_name_3
4p_name_4
t_record
idpidcount
————————————————
115
225
3440
4445
522
621
7435
8420
有两个这样的表,主表t_product(产品表),子表t_record(出库记录表,pid为t_product的外键),我要查主表的数据出来,
顺便把最新的出库记录数量(MAX(ID))查出来,如果没出库记录,则为空,不影响主表显示
效果如:
pidpnamelastClunt
——————————————————
1p_name_15
2p_name_21
3p_name_3
4p_name_420
这样的情况要怎么写这个SQL
——————————————————
制表符都乱了
------解决方案--------------------
SELECT T1.*, T2.COUNT
FROM T_PRODUCT T1,
(SELECT T1.PID, T1.COUNT
FROM T_RECORD T1,
(SELECT MAX(T.ID) ID, T.PID FROM T_RECORD T GROUP BY T.PID) T2
WHERE T1.ID = T2.ID
AND T1.PID = T2.PID) T2
WHERE T1.ID = T2.PID(+)
------解决方案--------------------
with t_product as
(
select 1 id, 'p_name_1' name
from dual
union
select 2 id, 'p_name_2' name
from dual
union
select 3 id, 'p_name_3' name from dual),
t_record as
(select 1 id, 1 pid, 5 count
from dual
union
select 2 id, 1 pid, 6 count
from dual
union
select 3 id, 2 pid, 7 count from dual)
select a.id, a.name, b.count
from t_product a,
(select pid, max(count) KEEP(DENSE_RANK FIRST ORDER BY id desc) count
from t_record
group by pid) b
where a.id = b.pid(+)