选择至少具有与合同要求相同的批准代码的供应商
Selecting suppliers that have at least the same approval codes as the contract requires
有 table 的供应商 'approval codes' (VNDAPP) 和 table 的合同 'requirement codes' (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_approval(supplierid, approvalid)
和 contracts_requirement(contractid, 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'
);
即统计对供应商的要求与合同的要求相匹配。然后,检查总数是否与合同总数相符。
这假定您在任何一方都没有重复的要求。
有 table 的供应商 'approval codes' (VNDAPP) 和 table 的合同 'requirement codes' (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_approval(supplierid, approvalid)
和 contracts_requirement(contractid, 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'
);
即统计对供应商的要求与合同的要求相匹配。然后,检查总数是否与合同总数相符。
这假定您在任何一方都没有重复的要求。