2015-11-25 2 views
1

Я пытаюсь получить список стран, где производят детали в первый раз в 2008 году
это мой SQL REQ:Почему этот запрос sql не работает?

SELECT DISTINCT * 
FROM pays p 
WHERE p.id_pays != (
    SELECT DISTINCT pays.id_pays 
    FROM pays 
    JOIN emission ON emission.id_pays = pays.id_pays 
    WHERE MIN(YEAR(emission.dateFrappe_emission)) != 2008 
) 

Она вернула меня:

"# 1111 - Недопустимое использование групповой функции ";

Но рес работы:

SELECT DISTINCT * 
FROM pays p 
WHERE p.id_pays != (
    SELECT DISTINCT pays.id_pays 
    FROM pays 
    JOIN emission ON emission.id_pays = pays.id_pays 
    WHERE YEAR(emission.dateFrappe_emission) = 2008 
) 

Можете ли вы мне помочь?

+0

'SELECT DISTINCT * FROM платит р WHERE p.id_pays NOT IN (SELECT, pays.id_pays ОТ платит РЕГИСТРИРУЙТЕСЬ испускание ON emission.id_pays = pays.id_pays GROUP BY pays.id_pays HAVING MIN (YEAR (emission.dateFrappe_emission))! = 2008 ) 'Вы должны использовать агрегатную функцию в разделе SELECT/HAVING – lad2025

+0

Thx но: # 1242 - Подзапрос возвращает более 1 строки –

+0

Попробуйте' NOT IN' вместо '! =' – lad2025

ответ

3

Вы можете использовать функции агрегации с SELECT и HAVING статьи, как:

SELECT DISTINCT * 
FROM pays p 
WHERE p.id_pays NOT IN (SELECT pays.id_pays 
         FROM pays 
         JOIN emission 
          ON emission.id_pays = pays.id_pays 
         GROUP BY pays.id_pays 
         HAVING MIN(YEAR(emission.dateFrappe_emission)) != 2008) 
+0

8 минут перед подтверждением. Thx много: D –

+1

@Antoine Еще одна вещь, это столбец 'pays.id_pays' NOT NULL? – lad2025

+0

Да, почему? –

2

Первое производство в 2008 году? Не является ли это просто:

select * 
from pays 
where 
(
    select min(year(emission.datefrappe_emission)) 
    from emission 
    where emission.id_pays = pays.id_pays 
) = 2008; 
+0

Он также работает: D Thx –

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