2011-10-27 5 views
0

誰か助けてくれますか?ジョインでGROUP_CONCATの値を連結できません

このクエリではidsが取得されていますが、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

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

これを変更することはできますが、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

「あなたはそれを変えることができるが、どうやらあなたはすべてを一緒にリンクする3つのテーブル、中央のテーブル、subscriber_dataを、参加する必要があり、オプションであり、本当にいないこと。 」 これは**まさに**私が欲しいものです。 書き込んだクエリは、まだヌル値を出力しません。 – user1017248

+0

その場合、戻って実際に達成したいことを説明しようとする必要があります。誤ったクエリを投稿するのではなく、実際の英語を使用します。 – GolezTrol

+0

もう一度推測しました。あなたはこのデータで行うことができるだけです。 – GolezTrol

関連する問題