连接表并选择给定ID仅存在一个值的行

时间:2019-03-25 07:00:23

标签: sql sql-server tsql

我不知道,如果我取得了很好的头衔,但是请让我形象地看一下。

enter image description here

所以我有两个表,对于给定的情况,我需要选择仅以欧元付款的行。

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

这些都是更大的表,具有900k +条记录。

您能否建议我查询的外观如何?

5 个答案:

答案 0 :(得分: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')

答案 1 :(得分:3)

尝试此查询:

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

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

答案 2 :(得分: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' 

答案 3 :(得分: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

答案 4 :(得分:1)

聚集是唯一有效的需求:

numpy