无法在连接上使用GROUP_CONCAT连接值

时间:2011-10-27 20:05:48

标签: mysql group-concat

有人能帮助我吗?

使用此查询我得到了id,但是当subscriber_data.fieldid为null时,它不会放置分隔符。例如,当4的值为空时,而不是2,12,它是2,12 ...

我认为问题在于使用子查询加入,但我无法在主查询中使用两个左连接...

这是我使用的查询:

SELECT 
    list_subscribers.emailaddress, 
    (SELECT 
         GROUP_CONCAT(IFNULL(customfields.fieldid,'') SEPARATOR '","') 
     FROM customfields 
     LEFT JOIN subscribers_data 
         ON subscribers_data.fieldid = customfields.fieldid 
     WHERE 
         customfields.fieldid IN (2,4,12,13,14,15,17,19,20,21,22,23,16,26,27) 
             AND 
         list_subscribers.subscriberid = subscribers_data.subscriberid
    ) AS data FROM list_subscribers

谢谢大家。

1 个答案:

答案 0 :(得分:0)

左连接没用。因为WHERE子句中的subscriber_data有条件,所以该子查询不会返回那些没有匹配的subscriber_data的行,所以它实际上就像使用INNER JOIN一样。您应该将该条件添加到左连接条件,但在此查询布局中是不可能的。内部查询中的连接条件中不允许外部查询的值。

你可以改变它,但显然你需要加入三个表,其中将它们全部链接在一起的中间表subscriber_data是可选的。这没有多大意义。

或者也许customfields是可选的表,但在这种情况下,你应该颠倒表格或使用RIGHT JOIN。

总之,我认为你的意思是这样写:

select
  s.emailaddress,
  GROUPCONCAT(IFNULL(f.fieldid, '') SEPARATOR '","')
from
  list_subscribers s
  inner join subscribers_data d on d.subscriberid = s.subscriberid
  left join customfields f on f.fieldid = d.fieldid
where
  d.fieldid in (2,4,12,13,14,15,17,19,20,21,22,23,16,26,27)
group by
  s.emailaddress

或者您是否要列出为订阅者填写的字段的ID?在这种情况下,它将是:

select
  s.emailaddress,
  GROUPCONCAT(IFNULL(d.fieldid, '') SEPARATOR '","')
from
  list_subscribers s
  cross join customfields f
  left join subscribers_data d on 
    d.subscriberid = s.subscriberid and
    d.fieldid = f.fieldid
where
  f.fieldid in (2,4,12,13,14,15,17,19,20,21,22,23,16,26,27)
group by
  s.emailaddress