加入表格并选择只存在一个值的给定ID的行。

3

我不知道这个标题是否准确,但请让我对此进行可视化。

enter image description here

所以我有两个表格,在给定情况下,我需要选择只使用欧元作为付款货币的行。

正确的文档ID将是:2、3、4、5

这些都是具有900k+记录的大型表格。

您能否请建议一下查询应该如何编写?

5个回答

4
使用带有not exists的相关子查询
select distinct a.document_id from tablename a inner join tablename b b on a.document_id=b.payment_docid
where not exists 
   (select 1 from tablename b1 where b1.payment_docid=b.payment_docid and currency<>'EUR')

3

试试这个查询:

select payment_docId from MyTable
group by payment_docId
having max(currency) = 'EUR'
   and min(currency) = 'EUR'

或者您可以使用having count(*) = 1minmax一起使用。


1
使用相关子查询。
select t1.* from table2 as t1
 where exists( select 1 from table2 t2 where t1.payment_docid=t2.payment_docid
                       having count(distinct currency)=1)
and currency='EUR' 

1
可以使用以下条件与 INNER JOIN 一起来获取所有行:
SELECT
  pd.payment_doc_id
, pd.currency
FROM DocTable dt 
INNER JOIN PaymentDocs pd 
    ON dt.document_id = pd.payment_doc_id AND pd.currency IN ('EUR')

如果您想要不同的行,则可以使用运算符 GROUP BY
SELECT
  pd.payment_doc_id
, pd.currency
FROM DocTable dt 
INNER JOIN PaymentDocs pd 
    ON dt.document_id = pd.payment_doc_id AND pd.currency IN ('EUR')
GROUP BY   pd.payment_doc_id
         , pd.currency

1
聚合是唯一有效的方法:
select doc_id
from table t
group by doc_id
having min(currency) = max(currency) and min(currency) = 'EUR';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接