繁体   English   中英

选择联接表中唯一存在的记录1

[英]Select records where the only exist 1 in a joined table

我有以下查询:

SELECT 
    A.POSTCARD_ID, A.STAMP_ID, B.END_DT
FROM
    PST_VS_STAMP A
JOIN 
    STAMP B ON A.POSTCARD_ID = B.POSTCARD_ID
WHERE 
    B.ACCOUNT LIKE 'AA%'
    AND B.END_DT = '9999-12-31'
GROUP BY 
    A.POSTCARD_ID, A.STAMP_ID, B.END_DT
HAVING 
    COUNT(A.POSTCARD_ID) < 2

但是我得到了错误的结果。

我只希望在PST_VS_STAMP表中有1条记录( HAVING < 2 )的明信片ID。 我该如何查询?

仅在要查询一行的表上进行子查询中的汇总。 因为只有一行,所以您可以使用聚合函数提取任何列的值(因为一行min(col)是该列的值):

select s.postcard_id, vs.stamp_id, s.end_dt
from stamp s join
     (select vs.postcard_id, min(stamp_id) as stamp_id
      from pst_vs_stamp vs
      group by vs.postcard_id
      having count(*) = 1
     ) s
     on vs.POSTCARD_ID = s.POSTCARD_ID
where s.ACCOUNT like 'AA%' and s.END_DT = '9999-12-31';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM