অদ্ভুত ওরাকল বহিরাগত সিনট্যাক্স ক্ষেত্রে যোগদান করুন


16

আমি নীচে এমন প্রশ্নের মধ্যে দেখেছি যা ওরাকল বাইরের জোড় সিনট্যাক্স থেকে এসকিউএল স্ট্যান্ডার্ড আউটডোর জোড় সিনট্যাক্সে পোর্ট করার কথা ছিল:

SELECT ...
FROM A, B, C, D, E
WHERE A.A_ID = B.A_ID
AND B.B_ID = C.A_ID(+)
AND B.B_KEY = C.B_KEY(+)
AND C.C_ID = D.C_ID(+)
AND B.A_ID = E.A_ID(+)
AND B.B_KEY = E.B_KEY(+)
AND 'CONSTANT' = C.X_ID(+)

এখন বাইরের জোড় সিনট্যাক্স অনুবাদ করা সাধারণত একটি যান্ত্রিক প্রক্রিয়া, তবে সেই শেষ লাইনটি আমাকে হতবাক করে দেয়। এর মানে কী? এর কী প্রভাব আছে?

উত্তর:


11

আমি যান্ত্রিক প্রক্রিয়া সম্পাদন করার চেষ্টা করেছি। আমি আশা করি আমি এটি ঠিক মনে রাখবেন।

এটাও বিশালাকার:

SELECT ...
FROM A
         join B on A.A_ID = B.A_ID
    left join C on B.B_ID = C.A_ID and B.B_KEY = C.B_KEY and 'CONSTANT' = C.X_ID
    left join D on C.C_ID = D.C_ID
    left join E on B.A_ID = E.A_ID and B.B_KEY = E.B_KEY

সংক্ষেপে আমি মনে করি লে রিফেলের উত্তরটি সঠিক।

বিঃদ্রঃ

পুরানো দিনগুলিতে মুখস্থ করার নিয়ম ছিল: ওরাকল যেখানে Aa = Bb (+) এসএকিউএল-সার্ভারে আ * = বিবি হয়ে যায় পুরানো সিনট্যাক্সটি আরও বিপরীত দিকে যায় এবং একটি তারকা হয়ে যায়, যার অর্থ Aa = Bb এ A বামে যোগ যোগ হয়


10

লাইনটির সি.এক্স_আইডি ধ্রুবক মানের সমান বা সি সারণি থেকে কোনও রেকর্ড না থাকার জন্য প্রয়োজন। অবশ্যই এটি যোগদানের পরে এটি এ টেবিল থেকে রেকর্ড সীমাবদ্ধ করবে না, কেবল যুক্ত হওয়া সি টেবিল থেকে রেকর্ড সীমাবদ্ধ করবে। এখানে একটি বিক্ষোভ:

সেটআপ:

CREATE TABLE T1 as (select rownum+1 t1_id from dual connect by rownum <= 4);
CREATE TABLE T2 as (
   select rownum t1_id, DECODE(rownum,2,'CONSTANT',3,'NoMatch') CompareField 
   from dual connect by rownum <= 3
);
SELECT * FROM T1;
SELECT * FROM T2;

ফলাফল:

SELECT T1.t1_id, T2.t1_id, T2.CompareField
FROM T1, T2
WHERE T1.t1_id = T2.t1_id(+)
AND 'CONSTANT' = T2.CompareField(+)
ORDER BY 1;

বা:

SELECT T1.t1_id, T2.t1_id, T2.CompareField
FROM T1 LEFT JOIN T2 ON T1.t1_id = T2.t1_id 
AND 'CONSTANT' = T2.CompareField
ORDER BY 1;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.