2016-12-07 3 views
-1

Я пытаюсь сделать запрос к базе данных в MySQL:Получение повторяющихся значений SQL в MySQL в таблице unioned

SELECT id, number_id, number, year 
    FROM 
     tb_figures WHERE (id = 7 AND year = 45 AND number IS NULL) 
    AND 
     (id = 7 AND year = 47 AND number IS NOT NULL) 
    ORDER BY 
     number_id; 

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

Я хочу, чтобы проверить, если номер НЕ NULL, если год = 47 и если число IS NULL, когда год = 45 и только затем показать результаты в таблице.

EDIT: Как указано в комментариях, я ошибался в логике, и указанный выше запрос не может работать.

мне удалось приблизиться с этим запросом:

SELECT 
    id, number_id, number, year 
FROM 
    tb_figures 
WHERE 
    id = 7 AND (year = 45 AND number IS NOT NULL) 

UNION 

SELECT 
    id, number_id, number, year 
FROM 
    tb_figures 
WHERE 
    id = 7 AND (year = 47 AND kennzahl IS NULL) 
ORDER BY 
    number_id; 

Но теперь мне нужно, чтобы отобразить только те строки, которые имеют тот же number_id.

Есть ли что-нибудь, что я могу добавить в запрос, чтобы отобразить только строки с дубликатом number_id?

+0

Я думаю, что 'WHERE' часть неправильна. Вы просматриваете одну строку с 'id = 7' с разными значениями в одном столбце (' year' и 'number')? «Id» уникален? –

+0

* "он возвращает пустую таблицу, хотя есть случаи, когда она должна соответствовать" * - Не совсем. Запись, где 'number IS NULL' и' number IS NOT NULL' в то же время не может существовать. Вы хотите 'OR', а не' AND' – Tomalak

+0

, что AND split - что делает с помощью возврата ИЛИ? –

ответ

3

Если я следую только ваше описание, я бы попробовать следующее:

SELECT id, number_id, number, year 
FROM tb_figures 
WHERE (year = 45 AND number IS NULL) -- if number IS NULL when year = 45 
    OR (year = 47 AND number IS NOT NULL) -- if number IS NOT NULL when year = 47 
ORDER BY number_id 
Смежные вопросы