বিভিন্ন সংখ্যক কলাম সহ দুটি সারণী একত্রিত করা


106

আমার দুটি টেবিল রয়েছে (টেবিল এ এবং টেবিল বি)।

এগুলির বিভিন্ন সংখ্যা কলাম রয়েছে - বলুন টেবিল এ এর ​​আরও কলাম রয়েছে।

আমি কীভাবে এই দুটি টেবিলটিকে একত্রিত করতে এবং টেবিল বি এর কলামগুলির জন্য নালাগুলি পেতে পারি?

উত্তর:


216

কম কলামের পছন্দ মতো টেবিলের নাল হিসাবে অতিরিক্ত কলাম যুক্ত করুন

Select Col1, Col2, Col3, Col4, Col5 from Table1
Union
Select Col1, Col2, Col3, Null as Col4, Null as Col5 from Table2

6
নাল কলামের জন্য কোনও ডিফল্ট মান পূরণ করার কোনও উপায় আছে কি?
হ্যানস

3
@ হ্যান্স: আপনি কলামোনাম বা ইসমনুল (কলামনাম, '-') হিসাবে কলামোনাম বা অনুরূপ কিছু isসনুল (কলামনাম, 0) এর মতো কিছু করতে পারেন।
কাংকান

3
আমি বুঝতে পেরেছি যে সমস্ত কলামগুলির তালিকা ছাড়াই এই সমাধানটিও কাজ করে। পরিবর্তে Select Col1, Col2, Col3, Null as Col4, Null as Col5 from Table2, এক এছাড়াও করতে পারেন Select *, Null as Col4, Null as Col5 from Table2,।
প্রতীক প্যাটেল

নাল মানটির জন্য, এই হ্যাকটি আমার পক্ষে কাজ করেছে: 'সোমারস্ট্রিং' ডামি কলাম হিসাবে। মূলত, আপনি কেবল কিছু মান দিয়ে NULL প্রতিস্থাপন করবেন। গ্রুপবাইয়ের সাথে ব্যবহার করার সময় এটিও কাজ করে।
সৌরভ জৈন

8

আমি এখানে এসে উপরের উত্তর অনুসরণ করেছি। কিন্তু অর্ডার অফ ডেটা টাইপের সাথে মিল নেই ত্রুটি ঘটায়। অন্য উত্তর থেকে নীচের বিবরণটি কার্যকর হবে।

ফলাফলগুলি কি আপনার টেবিলের কলামগুলির ক্রম হিসাবে একই? কারণ ওরাকল কলাম অর্ডারগুলিতে কঠোর। নীচের এই উদাহরণটি একটি ত্রুটি তৈরি করে:

create table test1_1790 (
col_a varchar2(30),
col_b number,
col_c date);

create table test2_1790 (
col_a varchar2(30),
col_c date,
col_b number);

select * from test1_1790
union all
select * from test2_1790;

ORA-01790: এক্সপ্রেশনটির সাথে সংশ্লিষ্ট অভিব্যক্তিটির একই ডেটাটাইপ থাকতে হবে

আপনি দেখতে পাচ্ছেন ত্রুটির মূল কারণটি ক্যালম তালিকার স্পেসিফায়ার হিসাবে * ব্যবহারের দ্বারা বোঝানো যায় না এমন ম্যাচ মিলিয়ে কলামে রয়েছে। স্পষ্টভাবে কলাম তালিকায় প্রবেশ করে এই ধরণের ত্রুটিগুলি সহজেই এড়ানো যায়:

পরীক্ষা 1_1790 ইউনিয়ন থেকে কল_এ, কল_ বি, কোল_সি নির্বাচন করুন সমস্ত পরীক্ষার কল_এ, কল_ বি, কোল_সি পরীক্ষা 2_1790 থেকে নির্বাচন করুন; এই ত্রুটিটির জন্য আরও ঘন ঘন পরিস্থিতিটি হ'ল যখন আপনি অসাবধানতাবশত নির্বাচনী তালিকায় দুটি বা ততোধিক কলাম স্যুপ (বা শিফট) করেন:

select col_a, col_b, col_c from test1_1790
union all
select col_a, col_c, col_b from test2_1790;

বা যদি উপরেরগুলি আপনার সমস্যার সমাধান না করে, তাহলে এই জাতীয় কলামগুলিতে একটি ALIAS তৈরি সম্পর্কে কীভাবে : (ক্যোয়ারীটি আপনার মত নয় তবে এখানে বিন্দুটি কীভাবে কলামে উপন্যাস যুক্ত করা যায়))

SELECT id_table_a, 
       desc_table_a, 
       table_b.id_user as iUserID, 
       table_c.field as iField
UNION
SELECT id_table_a, 
       desc_table_a, 
       table_c.id_user as iUserID, 
       table_c.field as iField

আমাকে একই জিনিসটি ব্যবহার করতে হয়েছিল, তবে আমি নন-নাল কলামগুলির জন্য a.col_name এবং b.col_name যুক্ত করেছি। নাল কলামগুলির জন্য, আমাকে ব্যবহার করতে হয়েছিল: নল এএস কল_নেম 1, নল এএস কোলনাম 2, ইত্যাদি
স্কট আর

1
নোট নির্বাচন করুন * ইউনিয়ন একাধিকবার শৃঙ্খলাবদ্ধ হতে পারে; নোট করুন যেখানে ফিল্টারগুলি প্রতিটি নির্বাচন
বিভাগে

1

সাধারণত যখন আপনি সেট ভিত্তিক অপারেটরগুলি ব্যবহার করছেন তখন আপনার একই সংখ্যক কলাম থাকতে হবে যাতে কাঙ্কনের উত্তর সঠিক।

SAS এসকিউএলের সেই দৃশ্যটি পরিচালনা করার জন্য নির্দিষ্ট অপারেটর রয়েছে:

এসএএস (আর) 9.3 এসকিউএল প্রক্রিয়া ব্যবহারকারীর গাইড

CORRESPONDING (CORR) কীওয়ার্ড

CORRESPONDING কীওয়ার্ডটি তখনই সেট সেট অপারেটর নির্দিষ্ট করা হয়। সিওআরআর পিআরসি এসকিউএলকে নাম অনুসারে সারণী এক্সপ্রেশনগুলিতে কলামগুলি মেলে এবং সাধারণ অবস্থানের দ্বারা নয়। নাম অনুসারে মেলে না এমন কলামগুলি OUTER UNION অপারেটর ব্যতীত ফলাফল সারণী থেকে বাদ দেওয়া হয়েছে।

SELECT * FROM tabA
OUTER UNION CORR
SELECT * FROM tabB;

এর জন্য:

+---+---+
| a | b |
+---+---+
| 1 | X |
| 2 | Y |
+---+---+

OUTER UNION CORR

+---+---+
| b | d |
+---+---+
| U | 1 |
+---+---+

<=>

+----+----+---+
| a  | b  | d |
+----+----+---+
|  1 | X  |   |
|  2 | Y  |   |
|    | U  | 1 |
+----+----+---+

ইউ-এসকিউএল অনুরূপ ধারণা সমর্থন করে:

নাম দ্বারা আউট ইউনিয়ন (*)

বাহ্য

বাই ক্লাব এবং অন তালিকার বাই প্রয়োজন। অন্যান্য সেট এক্সপ্রেশনগুলির বিপরীতে, আউটআর ইউনিয়নের আউটপুট স্কিমাতে উভয় পক্ষের মিলমান কলাম এবং অ-ম্যাচিং কলাম উভয়ই অন্তর্ভুক্ত। এটি এমন পরিস্থিতি তৈরি করে যেখানে উভয় পক্ষের একেকটি সারি থেকে আসা "নিখোঁজ কলামগুলি" থাকে যা কেবল অন্য দিকে উপস্থিত থাকে। এই জাতীয় কলামগুলির জন্য, "অনুপস্থিত ঘর" এর জন্য ডিফল্ট মান সরবরাহ করা হয়। ডিফল্ট মানগুলি হ্রাসযোগ্য প্রকারের জন্য নাল এবং নন-অযোগ্য প্রকারের জন্য নেট ডিফল্ট মান (উদাহরণস্বরূপ, int এর জন্য 0)।

নামে

OUTER এর সাথে ব্যবহার করার সময় প্রয়োজনীয়। ধারাটি নির্দেশ করে যে ইউনিয়নটি অবস্থানের ভিত্তিতে নয় কলামগুলির নাম অনুসারে মানগুলি মেলে। যদি BY NAME ধারাটি নির্দিষ্ট না করা থাকে তবে মিলটি অবস্থানগতভাবে সম্পন্ন হবে।

যদি ওএন ধারাটিতে "*" চিহ্ন অন্তর্ভুক্ত থাকে (এটি তালিকার শেষ বা একমাত্র সদস্য হিসাবে নির্দিষ্ট করা যেতে পারে), তবে অন ক্লজটি বাদে অতিরিক্ত নামের মিলগুলি অনুমোদিত, এবং ফলাফলের কলামগুলিতে সমস্ত মিলে যাওয়া কলামগুলি অন্তর্ভুক্ত করে ক্রম তারা বাম আর্গুমেন্ট উপস্থিত।

এবং কোড:

@result =    
    SELECT * FROM @left
    OUTER UNION BY NAME ON (*) 
    SELECT * FROM @right;

সম্পাদনা করুন:

বাইরের ইউনিয়নের ধারণাটি কেকিউএল দ্বারা সমর্থিত :

ধরনের:

অভ্যন্তরীণ - ফলাফলটিতে কলামগুলির উপসেট রয়েছে যা সমস্ত ইনপুট টেবিলগুলির মধ্যে সাধারণ।

বাহ্যিক - ফলাফলের মধ্যে সমস্ত কলাম রয়েছে যা যে কোনও ইনপুটগুলিতে ঘটে। যে সেলগুলি ইনপুট সারি দ্বারা সংজ্ঞায়িত করা হয়নি সেগুলি নালায় সেট করা আছে।

উদাহরণ:

let t1 = datatable(col1:long, col2:string)  
[1, "a",  
2, "b",
3, "c"];
let t2 = datatable(col3:long)
[1,3];
t1 | union kind=outer t2;

আউটপুট:

+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 | a    |      |
|    2 | b    |      |
|    3 | c    |      |
|      |      |    1 |
|      |      |    3 |
+------+------+------+

ডেমো


এসকিউএল এ কীভাবে উপার্জন করবেন তার কোনও ধারণা ??
কেতনবাঘাসিয়া

@ কিতানবাঘাসিয়া যতদূর আমি জানি কেবলমাত্র এসএএস এসকিউএল এবং ইউ-এসকিউএল এই ধারণাটিকে সমর্থন করে।
লুকাশজ সজোদা 12

-1

যদি কেবল 1 সারি থাকে তবে আপনি যোগদান ব্যবহার করতে পারেন

Select t1.Col1, t1.Col2, t1.Col3, t2.Col4, t2.Col5 from Table1 t1 join Table2 t2;

দুটি 1-সারি টেবিলের একটি ইউনিয়ন (একটি টিউপলের সাথে প্রতিটি দুটি মাল্টিসেট সম্পর্ক) ফলাফলের সম্পর্কের ক্ষেত্রে দুটি সারি (টিপলস) থাকবে। আপেক্ষিক বীজগণিত (যা এসকিউএল নয়) ইউনিয়নের ফলাফলটি একটি সারি হতে পারে, তবে কেবলমাত্র যদি দুটি ইনপুট সম্পর্কের মধ্যে একটি অভিন্ন টিপল থাকে, যেমন। এক-দ্বৈত সম্পর্কের স্ব-ইউনিয়ন।
রবার্ট মনফেরা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.