Sql 选择至少具有与合同要求相同的批准代码的供应商

Sql 选择至少具有与合同要求相同的批准代码的供应商,sql,db2,relational-division,Sql,Db2,Relational Division,有一个有“批准代码”(VNDAPP)的供应商表和一个有“要求代码”(COXA)的合同表。合同可以有任意数量的要求,供应商可以有任意数量的批准 VNDAPP: (vendor approvals table) VNUM (vendor number) REQMT (approval code) COXA: (contract requirements table) CONTR (contract number) REQMT (requirement) 需要找到所有获得至少

有一个有“批准代码”(VNDAPP)的供应商表和一个有“要求代码”(COXA)的合同表。合同可以有任意数量的要求,供应商可以有任意数量的批准

VNDAPP: (vendor approvals table)
VNUM    (vendor number)
REQMT   (approval code)

COXA:   (contract requirements table)
CONTR   (contract number)
REQMT   (requirement)
需要找到所有获得至少满足特定合同要求的批准的供应商

示例合同7736的要求编号为1和10。至少有27家供应商同时拥有这两项。由于需求是可变的,我无法将它们硬编码到查询中。我不确定这是否属于关系划分问题

SELECT VNDNO
FROM VNDAPP
LEFT JOIN COXA ON VNDAPP.REQMT = COXA.REQMT
GROUP BY VNDAPP.VNDNO
HAVING Count(COXA.REQMT) = (SELECT count(*)
FROM COXA WHERE COXA.CONTR = '7736'
GROUP BY COXA.CONTR)
我做错了什么

提前谢谢

示例数据:

Contract Requirement (COXA):
CONTR   REQMT
7736    1
7736    10
7737    1
7737    4
7737    6
7738    5
7739    1



Supplier Approval (VNDAPP):
VNDNO   REQMT
10019   1
10020   1
10020   2
10020   10
10021   1
10021   4
10021   5
10021   6



Desired result:
CONTR   VNDNO
7736    10020
7737    10021
7738    10021
7739    10019
7739    10020
7739    10021  

假设您有两个绑定表
supplier\u approval(supplierid,approvalid)
contracts\u requirement(contracid,requirementid)
,其中
approvalid
requirementid
对应。然后可以使用以下查询

select sa.supplierid
from supplier_approval sa
where sa.approvalid IN (
    select cr.requirementid
    from contracts_requirement cr
    where cr.contractid = 7736
 )
group by sa.supplierid
having count(distinct sa.approvalid) = (
    select count(*)
    from contracts_requirement cr
    where cr.contractid = 7736
)
我想你只是想:

SELECT VNDNO
FROM VNDAPP JOIN
     COXA
     ON VNDAPP.REQMT = COXA.REQMT
WHERE COXA.CONTR = '7736'
GROUP BY VNDAPP.VNDNO
HAVING Count(*) = (SELECT count(*)
                   FROM COXA
                   WHERE COXA.CONTR = '7736'
                  );
也就是说,计算与合同要求相匹配的供应商要求。然后,检查总数是否与合同的总数匹配


这假设您在任何一方都没有重复的需求。

至少向我们显示表架构和一些示例数据。1到10号存储在哪里?要求在哪里?批准在哪里?哪个表是哪个?他们有哪些栏目?编辑以显示髋关节和VNDaptHanks的描述,Radim-only缺少一个供应商。我来帮你。丢失的供应商有什么有趣的地方?奇怪的是,原始查询确实返回了它们。我的错误…我在手动计算批准时出错了。Radim,你的解决方案是正确的。非常感谢,@Radim!这是一个额外的步骤,如果我需要显示所有符合每个合同最低要求的供应商,我需要做什么修改?我如何加入合同需求表?