2015-09-02 2 views
-2

Мне нравится писать запрос примерно так, как показано ниже, где столбец xX_role подсчитывает строку больше, чем 1. Как это сделать. Ниже что-то подобное я пытаюсь сделать. Я пытаюсь фильтровать данные с одинаковыми значениями столбцов.Использование «group by» и «having» в запросе

Select 
    scrs.requestid, 
    scr_remedy, 
    type, 
    workstream, 
    system, 
    status, 
    scrs.release, 
    assigned_to, 
    `role`, 
    LEFT(role, 7) as 'xx_role', 
    MID(role, 5,3) as 'roleid' 
from 
    scrs, 
    tblscr_role 
GROUP BY 'xx_role' 
HAVING 
    (scrs.requestid = tblscr_role.requestid) 
    and (scrs.release = 'GROUP6' OR scrs.release = 'ER_JUNE15' OR scrs.release = 'ER_APR_15') 
    and Count('xx_role') > 1 
+0

На простейшем уровне речь идет о цитировании. Удаление одиночных кавычек из 'xx_role' будет иметь некоторый эффект, но, возможно, не вернет желаемый результат. Я замечаю, что между этими двумя таблицами не существует условия соединения, или есть в HAVING, но оно принадлежит WHERE. В любом случае использование '' xx_role'' с кавычками заставляет MySQL интерпретировать его как литеральную строку, а не псевдоним/идентификатор. –

+0

Чтобы мы с уверенностью отвечали на рабочий запрос, это помогло бы иметь образец входных строк вместе с образцом выходных строк, которые вы надеетесь получить из запроса. –

ответ

2

В дополнение к тому, что упомянуто @MichaelBerkowski, вы, скорее всего, злоупотребляете пресловутым расширением MySQL GROUP BY. Прочитай это.

http://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html

Вы также беспорядочное присоединиться к from scrs, tblsc_role. Присоединиться к условиям в предложениях HAVING не так, как вы думаете.

Select 
    scrs.requestid, 
    scr_remedy, 
    type, 
    workstream, 
    system, 
    status, 
    scrs.release, 
    assigned_to, 
    `role`, 
    LEFT(role, 7) as xx_role, 
    MID(role, 5,3) as roleid 
from scrs 
join tblscr_role ON scrs.requestid = tblscr_role.requestid 
where ( scrs.release = 'GROUP6' 
     OR scrs.release = 'ER_JUNE15' 
     OR scrs.release = 'ER_APR_15') 

После того, как вы получите деталь результатов вам нужно от этого запроса, вы можете пойти дальше и добавить GROUP BY/HAVING положения. Но попробуйте использовать стандартную группу GROUP BY.

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