2012-06-01 55 views
2

我试图在多对多表中获取所有一对一关系。在多对多关系中获取两个字段上的唯一记录

在下面的唯一记录的例子,我想返回将是最后的(3,3)

PaymentID InvoiceID 
1   1 
1   2 
2   2 
3   3 

最近我得到是

Select * from Table where PaymentID in (
select PaymentID from Table t 
inner join (
    select InvoiceId from Table 
    group by InvoiceId 
    having count(InvoiceId) = 1 
) inv on t.InvoiceId = inv.InvoiceId 
group by PaymentId 
having count(PaymentId) = 1 
) 

这将返回1和3

任何想法非常感谢

谢谢。

回答

4
SELECT * 
FROM (
     SELECT *, 
       COUNT(*) OVER (PARTITION BY paymentId) AS pcnt, 
       COUNT(*) OVER (PARTITION BY invoiceId) AS icnt 
     FROM mytable 
     ) q 
WHERE pcnt = 1 
     AND icnt = 1 
相关问题