2012-03-21 4 views
1

Вот сценарий. У меня есть 1 таблица, в которой есть все контактные данные. Другая таблица со списком категорий. И третья таблица, которая является ассоциированной таблицей, которая имеет идентификатор первой таблицы и идентификатор второй таблицы.Использование «AND» в предложении SQL WHERE для того же файла

Это как мой коллега таблица выглядит

contactdid -2 | categoryid -1

contactdid -2 | categoryid -2

contactdid -2 | categoryid -3

contactdid -3 | categoryid -1

contactdid -3 | categoryid -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 вставить в код.

Любая идея, как решить эту проблему. У меня есть данные. Заранее спасибо за помощь.

+1

как категория идентификатор держать два значения сразу не представляется возможным с И но ИЛИ для И оператора для возврата строки необходимо, чтобы оба выражения оценивались как истинные, но в вашем случае это никогда не доходит до того, насколько я понимаю ваш запрос. – Devjosh

ответ

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 Спасибо большое Марк – shabeer90

+0

I w как интересно, что, если у меня было 3 ID, например «WHERE contacts_category.categoryid в (1, 2, 3)», что будет указывать id для «HAVING COUNT (DISTINCT contacts_category.categoryid) = ??» – shabeer90

+0

Для трех разных категорий: 'HAVING COUNT (DISTINCT contacts_category.categoryid) = 3'. Если вы не хотите, по крайней мере, два из трех, и в этом случае 'HAVING COUNT (DISTINCT contacts_category.categoryid)> = 2'. –

3

Использовать OR или IN() вместо AND. Поле может не иметь двух значений одновременно

+0

+1 для «поля не могут иметь два значения одновременно». – Devjosh

5

contacts_category.categoryid не может быть 1 и 2 одновременно, perhabs означает OR вместо AND?

+0

. Мое требование состоит в том, чтобы получать электронные письма тех, кто находится в обеих категориях 1 и 2 – shabeer90

Смежные вопросы