【发布时间】:2019-03-25 07:00:23
【问题描述】:
我不知道,如果我的标题好,但请让我想象一下。
所以我有两个表,对于给定的情况,我需要选择付款货币仅为欧元的行。
正确的文档 ID 将是:2、3、4、5
这些是具有 90 万多条记录的整体更大的表。
您能建议我查询的外观吗?
【问题讨论】:
标签: sql sql-server tsql
我不知道,如果我的标题好,但请让我想象一下。
所以我有两个表,对于给定的情况,我需要选择付款货币仅为欧元的行。
正确的文档 ID 将是:2、3、4、5
这些是具有 90 万多条记录的整体更大的表。
您能建议我查询的外观吗?
【问题讨论】:
标签: sql sql-server tsql
将相关子查询与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')
【讨论】:
试试这个查询:
select payment_docId from MyTable
group by payment_docId
having max(currency) = 'EUR'
and min(currency) = 'EUR'
或者您也可以将having count(*) = 1 与min 或max 一起使用。
【讨论】:
使用相关子查询
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'
【讨论】:
可以使用具有以下条件的 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')
如果你想要 distinct 行,那么你可以申请 operator 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
【讨论】:
聚合是唯一有效的需求:
select doc_id
from table t
group by doc_id
having min(currency) = max(currency) and min(currency) = 'EUR';
【讨论】: