2016-09-22 56 views
0

我们已经升级了MYSQL数据库;MYSQL升级GROUP BY子句;这是不符合sql_mode = only_full_group_by

SELECT l.subscriberid AS subscriberid FROM email_list_subscribers AS l, email_queues AS q 
      WHERE q.recipient = l.subscriberid AND q.queueid = 2343 AND queuetype = 'send' 
      AND l.listid IN (31) GROUP BY l.emailaddress HAVING COUNT(l.emailaddress) > 1 

,现在我们得到

#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'emailmarketer.l.subscriberid' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 

我们能做些什么?

回答

1

试试这个:

SELECT l.emailaddress, 
     GROUP_CONCAT(l.subscriberid) AS subscriberids 
FROM email_list_subscribers l JOIN 
    email_queues q 
    ON q.recipient = l.subscriberid 
WHERE q.queueid = 2343 AND queuetype = 'send' AND 
     l.listid IN (31) 
GROUP BY l.emailaddress 
HAVING COUNT(l.emailaddress) > 1; 

注:

  • 决不FROM子句中使用逗号。 总是使用明确的,适当的JOIN语法。
  • 这将返回每个电子邮件的订阅者列表。
  • 如果有重复项,您可能需要GROUP_CONCAT(DISTINCT l.subscriberid)
+0

谢谢,我会尽力的。为什么我的选择适用于v5.6而不是5.7? – mbrc

+0

@mbrc。 。 。这不起作用的原因是由于SQL模式。 –

+0

我可以只为sql 5.7启用sql模式吗? – mbrc