2013-05-14 2 views
-2

ВЫБЕРИТЕ отдел FROM MyTable где контакт NULLКак я могу выбрать с исключением в MySql

Department Contact 
    ------------- --------- 
    Cleaning  Jack 
    Admin   Peter 
    Software  James 
    Cleaning  (null) 
    Cleaning  Jill 
    Hardware  (null) 

В приведенной выше таблице, как я могу выбрать отдел, где контакт является нулевым за исключением существовавшего контакта.

Заявление выше вернет «Очистка» и «Оборудование».

Что я ожидал только «Hardware»

Как я могу выбрать только «железо» или это возможно.

ТИА

+2

'ГДЕ СВЯЗЬ НУЛЛ И ОТДЕЛЕНИЕ = 'Оборудование'' ..? – user2246674

ответ

1

Это звучит, как вы хотите, чтобы исключить отделы, которые связаны с ненулевым значением в любой записи. Чтобы сделать это, вы должны сделать подзапрос, чтобы получить все ненулевые департаменты и исключить их из вашего запроса, который извлекает нулевые подразделения. Например:

SELECT DISTINCT department 
FROM mytable 
WHERE contact is null 
AND department NOT IN (SELECT department FROM mytable where contact is not null) 
2

Я думаю, вы хотите только возвращать строки, которые не имеют никаких ненулевых контактов.

SELECT 
    DISTINCT department 
FROM 
    myTable 
WHERE 
    contact IS NULL 
    AND department NOT IN (SELECT department FROM myTable where contact IS NOT NULL) 

или, если вы хотите сделать это без оговорки IN:

SELECT 
    DISTINCT a.[department] 
FROM 
    myTable AS a 
LEFT OUTER JOIN 
    myTable AS b 
     ON b.[department] = a.[department] 
     AND b.[contact] IS NOT NULL 
WHERE 
    a.[contact] IS NULL 
    AND b.[contact] IS NULL 

автообъединение использованием NOT NULL для условия, а затем проверить JOIN не удалось, проверив NULL в пункте WHERE.

+0

Мой ответ получен за несколько секунд до этого, но у вас лучше форматирование. Это бросок. – octern

+0

@octern nah, вы можете иметь его: D Я собираюсь попробовать и переделать его без 'NOT IN' – Matthew

+0

Мне будет интересно посмотреть, как вы это делаете! Я знаю, что подзапросы считаются менее элегантными, чем самообучающиеся, поэтому, вероятно, есть лучшее решение. – octern

0
SELECT department, 
     SUM(CASE WHEN Contact is not null THEN 1 ELSE 0 END) as count 
     from myTable 
     group by department 
     HAVING count > 0 ; 
+0

-1, а не от решения. – Matthew

+0

@Matthew see i updated мой ответ – PSR

+0

все еще не годится, это проверяет департаменты 'NULL', а не контакты ... тогда требуется второй шаг для устранения. – Matthew

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