2017-01-27 5 views
2

複数のフィールドを返すサブクエリの配列を返すトップレベルのクエリが必要です。シンプルselect array(select ...);は次のエラーのために動作しません:クエリのサブクエリから複数のフィールドのARRAYを返す方法

subquery must return only one column

パート:

(SELECT array(SELECT 
       logs_log.message -> 'slot_date', 
       logs_log.message -> 'start_time', 
       logs_log.message -> 'end_time', 
       logs_log.message -> 'source', 
       logs_log.message -> 'phone_number' 
       FROM 
       logs_log 
       WHERE 
       logs_log.message ->> 'phone_number' = leads_lead.phone_number)) 
    AS previous_appointments 

任意のアイデアをどのように私は、上記の結果を達成することができますか?

logs_logテーブル:

id, object_id, action_time, content_type_id, user_id, message 
28138, 0d36a20d-a251-41c3-ba7e-2d270004f4b1, 2017-01-27 06:48:06.550265+00, 18, 1, {"source": "driver_email", "end_time": "13:30:00", "slot_date": "0333-03-23", "start_time": "13:00:00", "phone_number": "1231231231"} 
28137, 0d074daa-0c77-4f96-b512-248cdfb9263b, 2017-01-24 21:31:16.140453+00, 18, 1, {"source": "driver_email", "end_time": "13:30:00", "slot_date": "3333-03-23", "start_time": "13:00:00", "phone_number": "9111111992"} 

leads_leadテーブル:

id, first_name, second_name, phone_number, city_id, source_id, external_id, attributes, created_at, ip_address, partner_id, tags 
ab99dbba-d339-407a-8e2d-c0ffd676213b,Денис,Антонов,7123123123,b3b62c53-6815-4898-b3b6-23a1196c1986,7ee38a21-32d0-4362-8519-0bc6e6ce37b8,20391438-4d19-48b3-aae0-8d1ab0d7ef93,"""{\""uuid\"":\""20392223-4d19-48b3-aae0-8d1ab0d7ef93\""}""",2016-11-07 17:30:00.583425+00,,, 
+1

してください** [EDIT]にあなたの副選択を変更します**あなたの質問といくつかのサンプルデータを追加し、そのデータに基づいて予想される出力。 [**フォーマットされたテキスト**](http://stackoverflow.com/help/formatting)、[スクリーンショットなし](http://meta.stackoverflow.com/questions/285551/why-may-i-not -upload-images-of-code-on-so-asking-a-question/285557#285557) –

+0

右。 'leads_lead'行ごとに' jsonb'オブジェクトの配列を返すか、 'jsonb'属性を配列として含む' leads_lead'行ごとに複数の結果行を返しますか? –

+0

@LaurenzAlbe結果のprevious_appointments列は、[["22-01-2017"、 "12:00:00"、 "13:00:00"、 "email"、 "23123123"]] – dimazubrik

答えて

1

(SELECT array_agg(
      array[ 
       logs_log.message -> 'slot_date', 
       logs_log.message -> 'start_time', 
       logs_log.message -> 'end_time', 
       logs_log.message -> 'source', 
       logs_log.message -> 'phone_number' 
      ] 
     ) 
FROM logs_log 
WHERE logs_log.message ->> 'phone_number' = leads_lead.phone_number 
) AS previous_appointments 
関連する問題