繁体   English   中英

循环检查从一张桌子到另一张桌子的条件

[英]Loop to check where condition from one table to other

我有两个表brand和generic_Drugs。 一个generic_Drugs模型可以具有多个品牌模型。 因此,generic_Drugs ID存储在品牌模型中。 但是,当删除通用药品时,其标识仍然存在于品牌模型中-这就是我的应用程序根据用户要求执行的方式。

我需要一种从数据库中检索品牌项目的技术,在该数据库中,它仅检索generic_drug类表中存在generic_drug id的品牌项目。

例:

品牌模型-品牌表

    +--------+-----------+
    | id     |Generic id |    
    +--------+-----------+
    |      1 | 2001      | 
    |      2 | 2001      | 
    |      3 | 2002      | 
    |      4 | 2003      | 
    |      5 | 2004      | 
    |      6 | 2004      |
    |      7 | 2005      |
    |      8 | 2006      | 
    |      9 | 2006      | 
    +--------+-----------+

Generic_Drugs -genericDrugs表

    +-----------+
    | id        |    
    +-----------+
    | 2001      | 
    | 2002      | 
    | 2003      |
    | 2005      |
    +-----------+

因此,我需要一种技术来使用brands表中generic_drug id中应用的条件列出品牌中的所有品牌项目,并仅列出generic_drugs表中存在其通用ID的那些品牌:

因此,当我运行查询时,它应该只检索:

    +--------+-----------+
    | id     |Generic id |    
    +--------+-----------+
    |      1 | 2001      | 
    |      2 | 2001      | 
    |      3 | 2002      | 
    |      4 | 2003      | 
    |      5 | 2004      | 
    |      7 | 2005      |
    +--------+-----------+

我们可以使用INNER JOIN。

SELECT DISTINCT(b.id) 
FROM brands b INNER JOIN genericDrugs gd
ON b.`Generic id` = gd.id

仅匹配的记录将被检索。

您可以通过两种方式实现相同目的。 一种是通过使用INNER JOIN

 SELECT Id
 FROM Brand b
 INNER JOIN generic_Drugs gd ON gd.id=b.`Generic id` 

要么

另一个是通过使用EXISTS

SELECT Id
FROM Brand b
WHERE EXISTS( SELECT 1
              FROM generic_Drugs 
              WHERE b.`Generic id`=id )

如果没有通用药品就不可能存在品牌,那么我建议您在删除通用药品时删除相应的品牌,这样就不必在选择查询中进行调整。 您可以将品牌表的Generic id添加为FK ,然后删除相应的品牌记录。

暂无
暂无

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

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