2016-05-16 42 views
3

下面的MySQL查詢提供了一個錯誤:'email.id' isn't in GROUP BY, 1055mysql的組時,別名指定

SELECT contact_a.id as contact_id, 
    contact_a.sort_name as `sort_name`, 
    contact_a.display_name as `display_name`, 
    phone.id as phone_id, 
    phone.phone_type_id as phone_type_id, 
    phone.phone as `phone`, 
    email.id as `email_id`, 
    email.email as `email`, 

FROM contact_table contact_a 
    LEFT JOIN email ON (contact_a.id = email.contact_id) 
    LEFT JOIN phone ON (contact_a.id = phone.contact_id) 

GROUP BY contact_a.id, 
    `sort_name`, 
    `display_name`, 
    `phone_id`, 
    `phone_type_id`, 
    `phone`, 
    `email_id`, 
    `email`"; 

eventhough我指定的email.id的別名GROUP BY

如果我將GROUP BY中的別名email_id替換爲email.id,它將起作用。

但是爲什麼我不能在GROUP BY中使用別名,它如何爲其他別名如phone_id,phone_type_id,email等工作?

+2

你能否檢查在from子句引用的任何表中是否有實際的email_id字段?此外,我只是沒有看到你的查詢點。在選擇列表中的所有字段和+1以上進行分組時,有什麼意義? – Shadow

+0

'email'表中有一列'id'。我已啓用ONLY_FULL_GROUP_BY模式。所以'email.id'存在 – jitendrapurohit

+0

這不是我所問過的。我明白,有一個email.id列。但是在from子句引用的任何表中有沒有email_id列? – Shadow

回答

1

由於mysql擴展了mysql標準並允許您在group by子句中使用列別名,因此唯一需要注意的是不要使用與任何引用表中的現有字段名稱相同的別名在from子句中。

如果你使用與現有字段相同的別名,那麼mysql將解釋group by子句,就好像它重寫到現有字段,而不是別名。這會導致上述錯誤消息。