2014-07-11 7 views
0

У меня есть SQL-запрос:запрос возвращения к нулю результаты

SELECT count(DISTINCT(email_address)) 

FROM Mytable 

WHERE TableID = '101' 

Этот запрос работает отлично.

Я хочу получить результаты для адресов электронной почты, для которых TableID имеет разные значения, такие как 123,421.

Итак, когда я пишу следующий запрос, почему я получаю 0 результат, возвращаемый в MySQLWorkbencch?

SELECT count(DISTINCT(email_address)) 

    FROM Mytable 

    WHERE TableID = '101' 
    AND TableId = '123' 
    AND TableID = '421' 
+3

Используйте 'OR' вместо' AND'. –

+0

вам требуется сопоставление всех этих идентификаторов таблицы одновременно с оператором AND – ako

+0

Используйте OR AND, когда все являются истинными, а OR выбирает либо – Tushar

ответ

5

Использование OR вместо AND. Используя AND, вам нужно, чтобы значение столбца было равно 3 различным постоянным значениям. Это нарушает законы Вселенной.

SELECT count(DISTINCT(email_address)) 
FROM Mytable 
WHERE TableID = '101' OR TableId = '123' OR TableID = '421'; 

В качестве альтернативы вы можете использовать пункт IN. С точки зрения фактического исполнения они эквивалентны, но в некоторых случаях IN может быть легче читать, особенно если список становится больше:

SELECT count(DISTINCT(email_address)) 
FROM Mytable 
WHERE TableID IN ('101', '123', '421'); 
2

Использование В пункте вместо этого.

SELECT count(DISTINCT(email_address)) 
FROM Mytable 
WHERE TableID IN ('101','123','421') 
2

ИСПОЛЬЗОВАНИЕ В или ИЛИ

  1. С помощью ИЛИ:

    SELECT count(DISTINCT(email_address)) 
    FROM Mytable 
    WHERE TableID = '101' 
    OR TableId = '123' 
    OR TableID = '421' 
    
  2. С помощью В:

    SELECT COUNT(DISTINCT(EMAIL_ADDRESS)) 
    FROM MYTABLE 
    WHERE TABLEID IN ('101','123','421'); 
    

Объяснение:

  • Вы пытаетесь проверить, является ли одно значение соответствует 3 различных уникальных значений, аналогично проверке, если

«Собака равна Собаке AND Собака равна Cat AND Собака равна COW '

Который возвращает false

  • С Вариант 1, с использованием OR, было бы как

'Собака равна Собака OR Собака равна Cat OR Собака составляет коровье

Что возвращает true

  • С Вариантом 2, используя IN, это было бы как

'Является ли собака доступна в списке, содержащем собака, кошка, корова'

который возвращает true

0

Попробуйте либо OR или IN пункта. AND возвращает записи, когда все указанное условие истинно, чего не происходит в вашем случае, поэтому return 0 result или empty result.

SELECT count(DISTINCT(email_address)) 
    FROM Mytable 
    WHERE TableID = '101' 
    OR TableId = '123' 
    OR TableID = '421'; 

ИЛИ

SELECT count(DISTINCT(email_address)) 
FROM Mytable 
WHERE TableID IN('101','123','421'); 
Смежные вопросы