ジョインでGROUP_CONCATで値を連結できません

誰も私を助けることができますか?

このクエリではIDを取得していますが、subscriber_data.fieldidがnullの場合は区切り文字を置いていません。たとえば、2の代わりに、12の場合は、4の値がnullの場合は2,12になります。

私は問題がJoinサブクエリにあると思うが、私はメインクエリでも2つの左ジョインでそれを作ることができませんでした...

これは以下を使用しているクエリです。

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

みんな、ありがとう。

0

1 答え

左の結合は役に立たない。 WHERE句のsubscriber_dataに条件があるため、そのサブクエリは一致するsubscriber_dataがない行を返しません。したがって、INNER JOINを使用した場合と同じように効果的に機能します。その条件を左の結合条件に追加する必要がありますが、このクエリレイアウトでは不可能です。外部クエリの値は、内部クエリの結合条件では許可されません。

あなたはそれを変更することができますが、3つのテーブルを結合する必要があります.3つのテーブルを結合する必要があります。中間テーブル、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
0
追加された
その場合は、戻って実際に達成したいことを説明しようとする必要があります。誤ったクエリを投稿するのではなく、実際の英語を使用します。
追加された 著者 GolezTrol,
もう一度推測した。あなたはこのデータで行うことができるだけです。
追加された 著者 GolezTrol,
私は理解していますが、あなたが実際に必要としていることはまだ分かりません。私は失礼ではありませんでしたが、実際の試行と実際の問題とテーブル間の関係を説明し直すだけで、両方を忘れることに役立ちます。つまり、私の2回目の試みでも、あなたが必要とすることはできません。 :)
追加された 著者 GolezTrol,
"あなたはそれを変更することができますが、3つのテーブルを結合する必要があります。中間テーブルのsubscriber_dataは、すべてをリンクしていますが、これはオプションです。それは正確に私が望むものです。あなたが書き込んだクエリは、まだヌル値を表示しません。
追加された 著者 user1017248,
申し訳ありませんが、もし私が傲慢に聞こえたら、私が欲しかったのは本当にあなたが言ったことだったということを意味したかったのです。実際には、subscribers_data.fieldidの代わりにsubscribers_data.dataを取得しますが、すべてのIDが来るかどうかを確認する目的で、私はfieldidを使用します。
追加された 著者 user1017248,