我有两个表品牌和generic_Drugs。一个generic_Drugs模型可以有许多品牌模型。因此,generic_Drugs ids存储在品牌模型中。然而,当删除仿制药时,其ID仍然存在于品牌模型中 - 这就是我的应用程序根据用户要求的行为方式。
我需要一种从数据库中检索品牌商品的技术,它只检索generic_drug类存在于generic_drug类表中的品牌商品。
示例:
品牌型号 - 品牌表
+--------+-----------+
| 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 |
+-----------+
所以我需要一种技术来列出品牌中所有品牌商品,使用条款应用于品牌表中generic_drug id的条件,并仅列出泛型ID存在于generic_drugs表中的那些品牌:
因此,当我运行查询时,它应仅检索:
+--------+-----------+
| id |Generic id |
+--------+-----------+
| 1 | 2001 |
| 2 | 2001 |
| 3 | 2002 |
| 4 | 2003 |
| 5 | 2004 |
| 7 | 2005 |
+--------+-----------+
答案 0 :(得分:0)
我们可以使用INNER JOIN。
SELECT DISTINCT(b.id)
FROM brands b INNER JOIN genericDrugs gd
ON b.`Generic id` = gd.id
仅检索匹配的记录。
答案 1 :(得分:0)
你可以通过两种方式实现同样的目标。一种是使用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
,然后删除相应的品牌记录。