![](/img/trans.png)
[英]Retrieve data from a table with a condition where and check the record in another table in one SELECT query
[英]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.