簡體   English   中英

無法在聯接上用GROUP_CONCAT合並值

[英]Can't concat values with GROUP_CONCAT on joins

有人可以幫我嗎?

通過此查詢,我獲得了ID,但是當Subscriber_data.fieldid為null時,它沒有放置分隔符。 例如,當4的值為null時,它不是2,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

感謝大家。

左聯接是無用的。 因為您在WHERE子句中對subscriber_data有一個條件,所以該子查詢將不會返回沒有匹配的subscriber_data的那些行,因此它就像使用INNER JOIN一樣有效。 您應該將該條件添加到左聯接條件,但是在此查詢布局中是不可能的。 內部查詢的聯接條件中不允許外部查詢的值。

您可以對其進行更改,但是顯然您需要連接三個表,其中將它們鏈接在一起的中間表“ users_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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM