2017-04-27 81 views
0

我有兩張牌子和generic_Drugs。一個generic_Drugs模型可以有許多品牌模型。因此,generic_Drugs ID存儲在品牌模型中。然而,當仿製藥被刪除時,它的ID仍然存在於品牌模型中 - 這就是我的應用程序根據用戶要求而行爲的方式。循環檢查從一張桌子到另一張桌子的情況

我需要一種技術,從數據庫檢索品牌項目,它只檢索generic_drug 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 id,並僅列出generic_drugs表中存在其通用標識的品牌:

因此,當我運行查詢應該只檢索:

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

回答

0

您可以通過兩種方式實現相同。一種是通過使用INNER JOIN

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

OR

而另一種是通過使用EXISTS

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

如果沒有仿製藥可以不存在的品牌,那麼我會建議在刪除通用藥物時刪除相應的品牌。因此,您不必在選擇查詢中進行調整。您可以添加品牌表的Generic id作爲FK,然後刪除相應的品牌記錄。

0

我們只需使用一個INNER JOIN。

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

只有匹配的記錄將被檢索。

相關問題