2013-02-15 83 views
1

我想返回一个结果集,其中包含另一个表中动态字段的分隔列表。它似乎工作,但结果只返回一行,即使我复制同一行多次。加入GROUP_CONCAT只返回1行

这里是我的查询:

SELECT export_rules.*, GROUP_CONCAT(CAST(CONCAT(export_rule_fields.key, ': ', export_rule_fields.value) AS char) SEPARATOR '|') AS fields FROM export_rules 
JOIN export_rule_fields ON export_rules.id = export_rule_fields.export_rule_id 
WHERE export_rules.output_type = "email" 
AND (export_rules.frequency = "daily" 
    AND export_rules.last_execution < TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)) 
    AND (export_rules.cron_expression = "25 11 * * *" 
     OR export_rules.cron_expression = "30 11 * * *")) 
OR (export_rules.frequency = "weekly" 
    AND export_rules.last_execution < TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 WEEK)) 
    AND (export_rules.cron_expression = "25 11 * * 5" 
     OR export_rules.cron_expression = "30 11 * * 5")) 
OR (export_rules.frequency = "monthly" 
    AND export_rules.last_execution < TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 MONTH)) 
    AND (export_rules.cron_expression = "25 11 15 * *" 
     OR export_rules.cron_expression = "30 11 15 * *")) 
GROUP BY export_rules.id 

它应该由它们相应的表达抢crons的列表(部分作品),然后将它们吐出的田地,但我认为GROUP_CONCAT或事实对于每个导出规则而言,联接都有多行将其抛出。

+3

或者它是'group by'不工作,因为你期待它? – 2013-02-15 18:40:56

回答

2

我通过使用LEFT JOIN而不是常规JOIN来解决它。当我测试过之前,我没有GROUP BY export_rules.id。

此问题已解决。