SQL « Почему запрос с DISTINCT возвращает повторы?
Помогите
Есть такой запрос:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .sql.geshi_code {font-family:monospace;} .sql.geshi_code .imp {font-weight: bold; color: red;} .sql.geshi_code .kw1 {color: #993333; font-weight: bold;} .sql.geshi_code .co1 {color: #808080; font-style: italic;} .sql.geshi_code .co2 {color: #808080; font-style: italic;} .sql.geshi_code .coMULTI {color: #808080; font-style: italic;} .sql.geshi_code .es0 {color: #000099; font-weight: bold;} .sql.geshi_code .br0 {color: #66cc66;} .sql.geshi_code .sy0 {color: #66cc66;} .sql.geshi_code .st0 {color: #ff0000;} .sql.geshi_code .nu0 {color: #cc66cc;} .sql.geshi_code span.xtra { display:block; }
SELECT DISTINCT company.id_comp,
company.name,
company.foto_url,
company.anons,
vacansia.id_vac,
vacansia.doljnost,
(SELECT COUNT(*) FROM vacansia WHERE STATUS='show' AND comp=company.id_comp) AS vac_count
FROM company JOIN vacansia ON vacansia.comp=company.id_comp
WHERE company.STATUS = 'show' AND vacansia.STATUS = 'show' ORDER BY RAND() LIMIT 2
Почему он возвращает повторные компании, если стоит DISTINCT? Или DISTINCT работает только при одном (не двойном) запросе.
Есть такой запрос:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .sql.geshi_code {font-family:monospace;} .sql.geshi_code .imp {font-weight: bold; color: red;} .sql.geshi_code .kw1 {color: #993333; font-weight: bold;} .sql.geshi_code .co1 {color: #808080; font-style: italic;} .sql.geshi_code .co2 {color: #808080; font-style: italic;} .sql.geshi_code .coMULTI {color: #808080; font-style: italic;} .sql.geshi_code .es0 {color: #000099; font-weight: bold;} .sql.geshi_code .br0 {color: #66cc66;} .sql.geshi_code .sy0 {color: #66cc66;} .sql.geshi_code .st0 {color: #ff0000;} .sql.geshi_code .nu0 {color: #cc66cc;} .sql.geshi_code span.xtra { display:block; }
SELECT DISTINCT company.id_comp,
company.name,
company.foto_url,
company.anons,
vacansia.id_vac,
vacansia.doljnost,
(SELECT COUNT(*) FROM vacansia WHERE STATUS='show' AND comp=company.id_comp) AS vac_count
FROM company JOIN vacansia ON vacansia.comp=company.id_comp
WHERE company.STATUS = 'show' AND vacansia.STATUS = 'show' ORDER BY RAND() LIMIT 2
Почему он возвращает повторные компании, если стоит DISTINCT? Или DISTINCT работает только при одном (не двойном) запросе.
1 ответов
Трындец, я только с третьего раза понял, что ты хочешь получить. Нафига пихать двойной запрос на такую задачу??? Обычный GROUP BY тут нужен.
SELECT
company.id_comp,
company.name,
company.foto_url,
company.anons,
vacansia.id_vac,
vacansia.doljnost,
COUNT(DISTINCT vacansia.id_vac) AS vac_count
FROM company
INNER JOIN vacansia ON vacansia.comp=company.id_comp
WHERE company.STATUS = 'show' AND vacansia.STATUS = 'show'
GROUP BY company.id_comp
ORDER BY RAND() LIMIT 2
2 Stalin:
Спасибо! Только не пойму зачем там вообще DISTINCT в вашем варианте? Мне нужны две уникальные компании при выборке вразнобой.
И ещё вопрос. При такой выборке компании, у которых нет вакансий (vac_count =0) не будут выбираться, правильно? Или нужно доп. условие?
Заранее спасибо!