简体   繁体   English

sql检查行是否是另一个表的子集

[英]sql check if rows are subset of another table

will you help my problem? 你能帮我解决问题吗? I have a tblProduct which is a bill of material for producing items with decal. 我有一个tblProduct,这是用于生产贴花物品的物料清单。 tblStock is the available decal that is in stock. tblStock是库存中的可用贴花。 I need a query to check which product can be manufactured based on the available decal. 我需要查询以根据可用的贴花检查可以生产哪些产品。 The product can only be produced if all the decals are available. 只有在所有贴花都可用的情况下才能生产产品。 Thanks so much in advanced 非常感谢高级

tblProduct tbl产品

    Id      decal_1         decal_2     decal_3        
    1       111             121         144
    2       104             106         144
    3       121             144         163
    4       122             144         163
    5       (null)          163         191
    6       104             121         163

tblStock tblStock

Available_decal
111
121
144
163
191

Desired Output 期望的输出

Id
1
3
5

Note that there is a null in number 5. this complicates the matter 请注意,数字5为空。这会使问题复杂化

An IN check should do it IN支票应该做

SELECT 
    * 
FROM 
    tblProduct 
WHERE 
    (decal_1 IS NULL OR decal_1 IN (SELECT Available_decal FROM tblStock))
    AND (decal_2 IS NULL OR decal_2 IN (SELECT Available_decal FROM tblStock))
    AND (decal_3 IS NULL OR decal_3 IN (SELECT Available_decal FROM tblStock))

Another way with EXISTS : EXISTS另一种方式:

SELECT 
    * 
FROM 
    tblProduct 
WHERE 
    (decal_1 IS NULL OR EXISTS (SELECT 1 FROM tblStock WHERE Available_decal = decal_1))
    AND (decal_2 IS NULL OR EXISTS (SELECT 1 FROM tblStock WHERE Available_decal = decal_2))
    AND (decal_3 IS NULL OR EXISTS (SELECT 1 FROM tblStock WHERE Available_decal = decal_3))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM