2014-04-08 37 views
1

我正在爲醫療中心製作數據庫。在我的情況下,我需要使用2個表來獲取數據。我有兩個表名爲ConsultationChanneling。在我的情況下,當患者放置一個新的頻道時,它會自動添加到諮詢表中。然後,病人完成諮詢後,該諮詢記錄將被刪除。但Channeling記錄沒有刪除(根據業務案例)。我需要從Channeling記錄中獲取記錄,即不存在中的Consultation表。我想這一點,如何從2表中使用mysql中的數據獲取數據?

SELECT c.* FROM Channeling c, Consultation cn WHERE c.cid!=cn.cid 

cidChanneling表的主鍵。它是Consultation的外鍵。當我使用這個查詢時,我有700多條記錄。但在我的Channelin表中只有75條記錄。我怎麼能這樣做。可能嗎?我正在使用mysql數據庫。

在此先感謝!

回答

0

將您的查詢視爲由WHERE子句過濾的笛卡爾積。因此,它是喜歡把75×Consultation records count記錄,然後丟棄所有這些組合,其中

c.cid=cn.cid 

這就是爲什麼你會得到更多的元素比Channelin了。

爲了得到你想要的東西,你可以嘗試用:

SELECT c.* FROM Channeling c WHERE 0 = (SELECT COUNT(1) FROM Consultation cn WHERE cn.cid=c.cid); 

或者:

SELECT c.* FROM Channeling c WHERE c.id NOT IN (SELECT DISTINCT cn.id FROM Consultation cn); 

這是不一樣的:

要選擇引導和諮詢的所有組合具有不同編號的元素

比:

要選擇從竄不存在在協商

0

所有元素您是選擇協商和channelings的每個可能的組合,然後過濾出具有相同ID的那些。

嘗試這樣:

SELECT * FROM Channeling WHERE cid NOT IN (SELECT cid FROM Consultation) 
0

你正在做兩個表的笛卡爾乘積,然後選擇具有條件c.cid=cn.cid記錄。您可以通過左加兩個表來完成此操作。這將返回通道的所有記錄,然後選擇具有諮詢的Id列的記錄。像這樣

SELECT c.* 
FROM Channeling c 
LEFT JOIN Consultation cn 
ON c.cid = cn.cid 
WHERE cn.cid IS NULL 
相關問題