2012-03-21 64 views
1

以下是方案。我有一張桌子,裏面有所有聯繫方式。另一個包含所有類別列表的表格。第三個表是關聯表,它具有第一個表的ID和第二個表的ID。在SQL WHERE子句中對同一字段使用'AND'

這是我的助手錶看起來像

contactdid -2 | categoryid -1

contactdid -2 | categoryid -2

contactdid -2 | categoryid -3

contactdid -3 | categoryid -1

contactdid -3 | 類別 -3

這是我的SQL代碼如下(生成使用SQLyog,我包括where子句)。

SELECT 
    press_contacts.email 
FROM 
    contacts_category 
    INNER JOIN press_category 
     ON (contacts_category.categoryid = press_category.id) 
    INNER JOIN press_contacts 
     ON (contacts_category.contactdid = press_contacts.id) 
WHERE contacts_category.categoryid = 1 AND contacts_category.categoryid = 2 ; 

我是說我沒有AND contacts_category.categoryid = 2插入代碼的輸出。

任何想法如何解決this.I顯然有數據。 在此先感謝您的幫助。

+1

如何類別編號一次,不可能與AND但OR 爲AND運算持有兩個值要返回一行,有必要將這兩個表達式評估爲true,但在您的情況下,我的理解力不會超過您的查詢 – Devjosh 2012-03-21 11:11:13

回答

2

如果你只想看到在這兩個類別的聯繫人的電子郵件地址,請嘗試:

SELECT press_contacts.email 
FROM contacts_category 
    INNER JOIN press_contacts 
     ON (contacts_category.contactdid = press_contacts.id) 
WHERE contacts_category.categoryid in (1, 2) 
GROUP BY press_contacts.email 
HAVING COUNT(DISTINCT contacts_category.categoryid)=2 
+0

這完美的作品:D 非常感謝Mark – shabeer90 2012-03-21 11:22:14

+0

I w因爲想知道如果我有3個ID像「(1,2,3)中的WHERE contacts_category.categoryid」,那麼ID會給出「HAVING COUNT(DISTINCT contacts_category.categoryid)= ??」 – shabeer90 2012-03-21 11:40:54

+0

對於三個不同的類別,「HAVING COUNT(DISTINCT contacts_category.categoryid)= 3'。除非你想要至少兩個三分之一,在這種情況下'具有計數(DISTINCT contacts_category.categoryid)> = 2'。 – 2012-03-21 11:49:32

3

使用ORIN()而不是AND。 一個字段不能同時有兩個值

+0

+1「field can not have two values at」time – Devjosh 2012-03-21 11:13:09

5

contacts_category.categoryid不能同時是1和2,你說的perhabs是OR而不是AND?

+0

我的要求是檢索那些在第一類和第二類的人的電子郵件 – shabeer90 2012-03-21 11:17:29