我有两张桌子,牌子和generic_Drugs。一个generic_Drugs模型可以有多个品牌模型。因此,generic_Drugs in存储在品牌模型中。然而,当一种非专利药物被删除时,它的id仍然存在于品牌模型中--这就是我的应用程序根据用户需求的行为方式。
我需要一种从数据库中检索品牌项目的技术,在数据库中,它只检索存在于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表中使用where条件列出来自品牌的所有品牌项目,并且只列出在generic_drugs表中存在通用id的品牌:
因此,当我运行查询时,它应该只检索:
+--------+-----------+
| id |Generic id |
+--------+-----------+
| 1 | 2001 |
| 2 | 2001 |
| 3 | 2002 |
| 4 | 2003 |
| 5 | 2004 |
| 7 | 2005 |
+--------+-----------+发布于 2017-04-27 09:08:04
你可以用两种方式实现同样的目标。一种是使用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 )如果一个品牌没有仿制药就不能存在,那么在删除非专利drug.So时,我建议您删除相应的品牌,而不必在select查询中进行调整。您可以添加品牌表的Generic id作为FK,然后删除相应的品牌记录。
发布于 2017-04-27 08:55:24
我们可以使用内部连接。
SELECT DISTINCT(b.id)
FROM brands b INNER JOIN genericDrugs gd
ON b.`Generic id` = gd.id将只检索匹配的记录。
https://stackoverflow.com/questions/43653021
复制相似问题