我不知道,如果我取得了很好的头衔,但是请让我形象地看一下。
所以我有两个表,对于给定的情况,我需要选择仅以欧元付款的行。
正确的文档ID为:2、3、4、5
这些都是更大的表,具有900k +条记录。
您能否建议我查询的外观如何?
答案 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(*) = 1
与min
或max
一起使用。
答案 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