জসনে একাধিক কলাম পোস্ট করে


23

আমি পোস্টগ্র্যাস্কেল 9.3.4 চালাচ্ছি। আমার 3 টি ক্ষেত্র সহ একটি টেবিল রয়েছে:

id   name  addr
---  ----  ----
1    n1    ad1
2    n2    ad2
...

ক্ষেত্রগুলি সহ আমাকে একটি নতুন টেবিলে ডেটা স্থানান্তর করতে হবে:

id   data
---  ----
1    {'name': 'n1', 'addr': 'ad1'}
2    {'name': 'n2', 'addr': 'ad2'}
...

row_to_jsonফলাফল হিসাবে SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) tযুক্ত হিসাবে আমার জন্য সমাধান নয় id। আমার ডেটা ফিল্ডে আমার প্রয়োজনীয় ক্ষেত্রগুলি (নাম এবং সংযোজক) চয়ন করার কোনও উপায় আছে?


উত্তরটি সঠিক কিনা তা আমি নিশ্চিত নই। আমি এটি 2 বছর আগে জিজ্ঞাসা করেছি। আমি তখন আমার প্রশ্নের উত্তরও দিয়েছিলাম তবে এটিকে সঠিক হিসাবে চিহ্নিত করিনি।
আলীবিজেড

উত্তর:


52

সেখানে সঙ্গে একটি ভাল বিকল্প json_build_object()Postgres মধ্যে 9.4+ :

SELECT id, json_build_object('name', name, 'addr', addr) AS data
FROM   myt;

তবে row_to_json()পোস্টগ্রিস ৯.৩- এ একটি সহজ ও দ্রুততর উপায়ও রয়েছে :

SELECT id, row_to_json((SELECT d FROM (SELECT name, addr) d)) AS data
FROM   myt;

ডিবি <> ফিডল এখানে পোস্টগ্রিজ 9.6 এ
পুরাতন এসকিউএল ফিডল

সম্পর্কিত উত্তর:


এটি একটি ভাল উত্তর, এবং ঝাঁকুনির প্রমাণ আছে।
মিগলিলে

5

আমি এই লিঙ্ক থেকে উত্তর খুঁজে পেয়েছি :

select * from (
  select id,
    (
      select row_to_json(d)
      from (
        select name, addr
        from myt d
        where d.id=s.id
      ) d
    ) as data
  from myt s
)

আপনার নিজের উত্তরটিকে সঠিক হিসাবে চিহ্নিত করতে ভুলবেন না (যদিও কোনও বিন্দু নেই :-() I আমি অবিলম্বে এটি করতে পারব বলে মনে করি না, তবে ভবিষ্যতে এটি একইরকম প্রশ্নে কাউকে সহায়তা করতে পারে
ভেরেস

2
বাহ্যিক ক্যোয়ারীতে হারিয়ে যাওয়া টেবিলের নাম বাদে এটি প্রয়োজনীয়তার চেয়ে জটিল এবং ব্যয়বহুল। আমি একটি উত্তর সহ আরও একটি উত্তর যুক্ত করলাম।
এরউইন ব্র্যান্ডসেটেটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.