ক্রস যোগ দেওয়ার জন্য কী কী ব্যবহার হয়?


105

একটি ক্রস জয় দুটি সেট এর টিপলগুলিতে একটি কার্টেসিয়ান পণ্য সম্পাদন করে।

SELECT *
FROM Table1
CROSS JOIN Table2

কোন পরিস্থিতিতে এই জাতীয় এসকিউএল অপারেশন বিশেষভাবে কার্যকর হয়?


36
সত্যিই দুঃখ হচ্ছে যে এই প্রশ্নটি বন্ধ হয়ে গেছে। আমি মনে করি এটি সম্প্রদায় উইকি হিসাবে চিহ্নিত করা যেতে পারে, তবে এটি গঠনমূলক নয় এটি বলা অন্যায্য।
ওয়েইন কোর্টস

1
আমি রাজী. এটি আমার যে সঠিক প্রশ্নের উত্তর দিয়েছিল।
হেডস

10
এমন সময়গুলি আসে যখন কোনও নতুন বিকাশকারী তারা যে সফ্টওয়্যারটি ব্যবহার করছেন তার নির্দিষ্ট ফাংশনগুলির প্রভাবগুলি বুঝতে সমস্যা হয়। এই জাতীয় প্রশ্নগুলি নতুন ডেভসগুলির জন্য বিশেষত সহায়ক, মূলত কারণ নিম্নলিখিত আলোচনাটি জুনিয়র দেব কখনও বিবেচনা না করে এমন অনেকগুলি সম্ভাবনা আলোকিত করে। প্রশ্নের ফর্ম্যাটটি প্রাথমিকভাবে প্রাথমিক, তবে উদ্দেশ্যটি সত্য বলে মনে হয় যে এটি জিজ্ঞাসা করে "এটি এমনকি কেন বিদ্যমান?" আমি ওয়েইন কোর্টসের সাথে একমত, এটা লজ্জার বিষয় যে ক্যাস্পার ওন এটি বন্ধ করার জন্য নির্বাচন করেছিল এবং এটিকে "গঠনমূলক নয়" বলে অভিহিত করেছে। "গঠনমূলক নয়" অংশটি বিশেষ করে আমাকে বিরক্ত করে।
কওরি

উত্তর:


93

আপনার যদি এমন কোনও "গ্রিড" থাকে যা আপনি পোশাকের নির্দিষ্ট নিবন্ধের জন্য আকার এবং রঙের তথ্যের মতো সম্পূর্ণরূপে পপুলেশন করতে চান:

select 
    size,
    color
from
    sizes CROSS JOIN colors

সম্ভবত আপনি এমন একটি টেবিল চান যাটিতে প্রতিদিন প্রতি মিনিটের জন্য একটি সারি থাকে এবং আপনি প্রতি মিনিটে কোনও প্রক্রিয়া কার্যকর করেছে তা যাচাই করতে আপনি এটি ব্যবহার করতে চান, তাই আপনি তিনটি টেবিল অতিক্রম করতে পারেন:

select
    hour,
    minute
from
    hours CROSS JOIN minutes

অথবা আপনার কাছে স্ট্যান্ডার্ড রিপোর্ট চশমাগুলির একটি সেট রয়েছে যা আপনি বছরে প্রতি মাসে প্রয়োগ করতে চান:

select
    specId,
    month
from
    reports CROSS JOIN months

এগুলি দর্শন হিসাবে বজায় রাখার সমস্যাটি হ'ল বেশিরভাগ ক্ষেত্রে, আপনি একটি সম্পূর্ণ পণ্য চান না, বিশেষত পোশাকের ক্ষেত্রে। আপনি MINUSবহন করেন না এমন নির্দিষ্ট সংমিশ্রণগুলি সরাতে আপনি ক্যোয়ারিতে যুক্তি যুক্ত করতে পারেন তবে কোনও টেবিলকে অন্য কোনও উপায়ে পপুলেশন করা এবং কার্তেসিয়ান পণ্যটি ব্যবহার না করা আপনার পক্ষে আরও সহজ হতে পারে।

এছাড়াও, আপনি টেবিলগুলিতে ক্রস যোগ দেওয়ার চেষ্টা করতে পারেন যা সম্ভবত আপনি ভাবেন তার চেয়ে আরও কয়েকটি সারি রয়েছে বা সম্ভবত আপনার WHEREধারাটি আংশিক বা সম্পূর্ণ অনুপস্থিত ছিল। সেক্ষেত্রে আপনার ডিবিএ আপনাকে অবিলম্বে বাদ দেওয়ার বিষয়ে অবহিত করবে। সাধারণত সে সুখী হয় না।


5
... সেই ক্ষেত্রে, আপনার ডিবিএ আপনাকে অবিলম্বে বাদ দেওয়ার বিষয়ে অবহিত করবে। সাধারণত সে সুখী হয় না। ... হাহা, তাই সত্য!
আরএসডব্লিউ

2
@ ডেভ: দ্বিতীয় উদাহরণটি কি কেবলমাত্র কয়েক মিনিটের সাথে মিশ্রিত হবে?
রাকেশ

@ রাকেশ, ভাল ক্যাচ, আমি যেটা টাইপ করছিলাম তা বাদ দিয়ে অন্য কিছু নিয়ে ভাবছিলাম। সংশোধন করা হয়েছে।
ডেভ ডুপ্লান্টিস

1
আমি যদি ক্রসের সাথে যুক্ত হওয়া খুব ব্যবহারিক হয়ে উঠতে পারি তবে আপনাকে যদি 2 সেট আইডির (সম্ভবত সিএসভি ফর্ম্যাটে) দেওয়া হয় তবে একটি সেটটিতে কর্মচারী আইডি থাকবে এবং অন্যটিতে টাস্ক আইডি থাকবে। ধারণাটি আপনার কাছে এমপ্লয়ি টাস্কের জন্য একটি এম 2 এম টেবিল রয়েছে। আপনি প্রতিটি প্রদত্ত কর্মীকে প্রতিটি কার্য নির্ধারণের জন্য ক্রস জয়েন ব্যবহার করতে পারেন, আপনি সিএসভিটিকে টেবিল ভেরিয়েবল (বা কিছু) রূপান্তরিত করেছেন।
সিএনবায়োটিক


14

আপনি সাধারণত বেশিরভাগ ডাটাবেস প্রশ্নের জন্য একটি সম্পূর্ণ কার্টেসিয়ান পণ্য চান না। রিলেশনাল ডাটাবেসের পুরো শক্তিটি হ'ল আপনি ডিবি থেকে অপ্রয়োজনীয় সারিগুলি এড়ানো এড়াতে আপনার আগ্রহী হতে পারে এমন যে কোনও বিধিনিষেধ প্রয়োগ করতে পারেন।

আমি মনে করি এমন একটি সঙ্কলিত উদাহরণ যেখানে আপনি এটি চান তা হতে পারে যদি আপনার কাছে কর্মীদের একটি টেবিল থাকে এবং এমন একটি টেবিল থাকে যা করার প্রয়োজন হয় এবং একটি চাকরিতে একজন কর্মীর সমস্ত সম্ভাব্য অ্যাসাইনমেন্ট দেখতে চান।


11

ঠিক আছে, এটি সম্ভবত প্রশ্নের উত্তর দেবে না, তবে, যদি এটি সত্য হয় (এবং আমি এটি সম্পর্কে নিশ্চিত নই) এটি ইতিহাসের মজাদার একটি বিট।

ওরাকলের প্রথম দিনগুলিতে, একজন বিকাশকারী বুঝতে পেরেছিল যে তাকে একটি সারণীতে প্রতিটি সারিটির নকল করা দরকার (উদাহরণস্বরূপ, এটি ইভেন্টের টেবিল ছিল এবং এটি আলাদাভাবে "সূচনা ইভেন্ট" এবং "শেষ ইভেন্ট" পরিবর্তন করার প্রয়োজন ছিল এন্ট্রি)। তিনি বুঝতে পেরেছিলেন যে যদি তার কেবল দুটি সারি সহ একটি টেবিল থাকে তবে তিনি প্রথম টেবিলের কেবল কলামগুলি নির্বাচন করে একটি ক্রস জয়েন করতে পারেন এবং তার প্রয়োজনীয়তাটি ঠিকঠাক পেতে পারেন। সুতরাং তিনি একটি সাধারণ টেবিল তৈরি করেছিলেন, যা তিনি স্বাভাবিকভাবেই যথেষ্ট পরিমাণে "ডুয়াল" নামে পরিচিত।

পরে, তাকে এমন কিছু করা দরকার যা কেবল কোনও টেবিল থেকে একটি নির্বাচনের মাধ্যমে সম্পন্ন করা যেতে পারে, যদিও অ্যাকশনটির নিজের সাথে টেবিলের সাথে কোনও সম্পর্ক ছিল না, (সম্ভবত তিনি তার ঘড়িটি ভুলে গিয়েছিলেন এবং সময়টি নির্বাচন থেকে সিলেক্টের মাধ্যমে পড়তে চেয়েছিলেন .. ।) সে বুঝতে পেরেছিল যে তার কাছে এখনও তার ডুয়াল টেবিলটি পড়ে আছে এবং এটি ব্যবহার করেছে। কিছুক্ষণ পরে, তিনি দু'বার মুদ্রিত সময়টি দেখে ক্লান্ত হয়ে পড়েছিলেন, ফলে তিনি একটির সারি মুছে ফেলেন।

ওরাকলে থাকা অন্যরা তার টেবিলটি ব্যবহার শুরু করেছিলেন এবং শেষ পর্যন্ত, এটি স্ট্যান্ডার্ড ওরাকল ইনস্টলেশনতে অন্তর্ভুক্ত করার সিদ্ধান্ত নেওয়া হয়েছিল।

যা ব্যাখ্যা করে যে একটি টেবিলের যার একমাত্র তাত্পর্য এটি হ'ল এর একটি সারিতে একটি নাম রয়েছে যার অর্থ "দুটি"।


8

কীটি হল "আমাকে সমস্ত সম্ভাব্য সংমিশ্রণগুলি দেখান"। আমি এগুলি অন্য গণনা করা ক্ষেত্রগুলির সাথে মিলিয়ে ব্যবহার করেছি তারপরে বাছাই করা / ফিল্টার করা।

উদাহরণস্বরূপ, বলুন আপনি একটি সালিসি (ট্রেডিং) অ্যাপ্লিকেশন তৈরি করছেন। আপনার কাছে বিক্রেতারা দামে পণ্য সরবরাহ করছেন এবং ক্রেতারা কোনও দামে পণ্য চাইছেন। আপনি পণ্যের কীতে ক্রস জয়েন করেন (সম্ভাব্য ক্রেতাদের এবং বিক্রেতাদের সাথে মেলে তুলতে), ব্যয় এবং দামের মধ্যে স্প্রেড গণনা করুন, তারপরে ডেস্ককে সাজান। আপনাকে (মধ্যস্থতাকে) কার্যকর করার জন্য সবচেয়ে লাভজনক বাণিজ্য দেওয়ার জন্য এটির উপর। প্রায়শই আপনার কাছে অবশ্যই অন্যান্য সীমাবদ্ধ ফিল্টার মানদণ্ড থাকে।


আহ! এই ব্যাখ্যাটি আমার কাছে সবচেয়ে বেশি অর্থবোধ করে। এক্ষেত্রে, একটি অন্তর্ভুক্ত যোগদান কোনও অর্থবোধ করে না কারণ কোনও পণ্য আইডি এবং বিক্রেতার মধ্যে কোনও সম্পর্ক নেই কারণ একাধিক বিক্রেতা একই পণ্য বিক্রি করতে পারে।
moonman239

3

অঙ্কের টেবিলের মতো কিছু নেয়, যার মধ্যে 0-9 অঙ্কের দশটি সারি থাকে। ফলাফলটি যথাযথভাবে গণনা করা সহ আপনি যে ফলাফলটি পেতে পারেন তার অনেকগুলি সারণী পেতে আপনি সেই টেবিলটিতে কয়েকবার ক্রস জয়েন ব্যবহার করতে পারেন। এর বেশ কয়েকটি ব্যবহার রয়েছে। উদাহরণস্বরূপ, আপনি একটি নির্দিষ্ট বছরে প্রতিদিনের জন্য একটি সেট পেতে এটি একটি ডেটাড () ফাংশনটির সাথে একত্রিত করতে পারেন।


2

ক্রসস্ট্যাব প্রতিবেদন তৈরি করতে ক্রস জয়েন ব্যবহার করার এটি একটি আকর্ষণীয় উপায় । আমি স্মার্টটিসের জন্য জো সেলকোর এসকিউএল এ পেয়েছি এবং এটি বেশ কয়েকবার ব্যবহার করেছি। এটি একটি সামান্য সেটআপ লাগে না, কিন্তু সময় ব্যয় করা মূল্য ছিল।


1

কল্পনা করুন যে আপনার কাছে আইটেম এবং তারিখের একটি নির্দিষ্ট সংমিশ্রণ (দাম, প্রাপ্যতা, ইত্যাদি) প্রদান করতে চান এমন একাধিক প্রশ্ন রয়েছে। আপনি আইটেম এবং তারিখগুলি পৃথক টেম্প টেবিলগুলিতে লোড করতে এবং আপনার প্রশ্নগুলি টেবিলগুলিতে সংযুক্ত করতে পারেন। আইএন ক্লজে আইটেম এবং তারিখ গণনার বিকল্পের তুলনায় এটি আরও সুবিধাজনক হতে পারে, বিশেষত যেহেতু কিছু ডাটাবেস একটি আইএন ধারাতে উপাদানগুলির সংখ্যা সীমাবদ্ধ করে।


1

আপনি এটি ব্যবহার করতে পারেন ক্রস JOIN উদ্দেশ্যে পরীক্ষার জন্য ডেটা উৎপন্ন - - আপনি যেমন রক্ত গোষ্ঠী (এ, বি, ..) এর সব সম্ভব সমন্বয় প্রয়োজন রহঃ - - সব সম্পত্তি মেশা / + ইত্যাদি ...: থেকে এটা --tune আপনার উদ্দেশ্যে;) - আমি এই ক্ষেত্রে বিশেষজ্ঞ নই;)

CREATE TABLE "HR"."BL_GRP_01" 
("GR_1" VARCHAR2(5 BYTE));
REM INSERTING into BL_GRP_01
SET DEFINE OFF;
Insert into BL_GRP_02 (GR_1) values ('A');
Insert into BL_GRP_02 (GR_1) values ('B');
Insert into BL_GRP_02 (GR_1) values ('O');
Insert into BL_GRP_01 (GR_1) values (NULL);

CREATE TABLE "HR"."BL_GRP_02" 
("GR_1" VARCHAR2(5 BYTE));

REM INSERTING into BL_GRP_02
SET DEFINE OFF;
Insert into BL_GRP_02 (GR_1) values ('A');
Insert into BL_GRP_02 (GR_1) values ('B');
Insert into BL_GRP_02 (GR_1) values ('O');
Insert into BL_GRP_02 (GR_1) values (NULL);

CREATE TABLE "HR"."RH_VAL_01" 
("RH_VAL" VARCHAR2(5 BYTE));
REM INSERTING into RH_VAL_01
SET DEFINE OFF;
Insert into RH_VAL_01 (RH_VAL) values ('+');
Insert into RH_VAL_01 (RH_VAL) values ('-');
Insert into RH_VAL_01 (RH_VAL) values (NULL);

select distinct  a.GR_1 || b.GR_1 || c.RH_VAL as BL_GRP
from BL_GRP_01 a, BL_GRP_02 b, RH_VAL_01 c
GROUP BY a.GR_1, b.GR_1, c.RH_VAL;
  • একটি সাধারণ আইডি ব্যতীত 2 টেবিলের জন্য একটি জোড় তৈরি করুন এবং তারপরে সর্বোচ্চ সম্ভাব্য সংমিশ্রণ সন্ধান করতে সর্বাধিক () ইত্যাদি ব্যবহার করে এটি গোষ্ঠী করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.