আমরা কি একক স্কেল - ওরাকল এসকিউএল একাধিক "AS এর সাথে" থাকতে পারি?


106

আমার খুব সাধারণ প্রশ্ন ছিল: ওরাকল কি একক বর্গ স্টেটমেন্টে একাধিক "AS সাথে" অনুমতি দেয়?

উদাহরণ:

WITH abc AS( select ......)

WITH XYZ AS(select ....) /*This one uses "abc" multiple times*/

Select ....   /*using XYZ multiple times*/

আমি একই ক্যোয়ারিকে একাধিকবার পুনরাবৃত্তি করে ক্যোয়ারিকে কাজ করতে পারি, তবে তা করতে চাই না এবং "WITH AS" হিসাবে উত্তোলন করব। এটি একটি সাধারণ প্রয়োজনের মতো বলে মনে হচ্ছে তবে ওরাকল আমাকে অনুমতি দেয় না:

ORA-00928: নিখরচায় নির্বাচন কীওয়ার্ড

উত্তর:


200

আপনি এটি হিসাবে এটি করতে পারেন:

WITH abc AS( select
             FROM ...)
, XYZ AS(select
         From abc ....) /*This one uses "abc" multiple times*/
  Select 
  From XYZ....   /*using abc, XYZ multiple times*/

4
আমরা কি প্রথম উপ-উপকরণ থেকে দ্বিতীয় উপকণিকার জন্য উপনামটি ব্যবহার করতে পারি? এক্ষেত্রে abcএবং xyzsubqueries? আমার প্রথম সাবকোয়ারির ফলাফল পেতে এবং এটি দ্বিতীয় উপকয়টিতে ব্যবহার করা দরকার।
মোম

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

নিখুঁত উত্তর.
ইনফিনিটফ্ল্যাশ

29

সঠিক বাক্য গঠনটি হ'ল -

with t1
as
(select * from tab1
where conditions...
),
t2
as
(select * from tab2
where conditions...
(you can access columns of t1 here as well)
)
select * from t1, t2
where t1.col1=t2.col2;

5
"আপনি এখানে টি 1 এর কলামগুলিও অ্যাক্সেস করতে পারেন" উল্লেখ করতে খুব সহায়ক হয়েছিল।
ব্রেইন

10

হ্যা, তুমি পারো...

WITH SET1 AS (SELECT SYSDATE FROM DUAL), -- SET1 initialised
     SET2 AS (SELECT * FROM SET1)        -- SET1 accessed
SELECT * FROM SET2;                      -- SET2 projected

10/29/2013 10:43:26 AM

কমন সারণী এক্সপ্রেশনগুলিতে এটি সূচনা করা উচিত যাতে ক্রমটি অনুসরণ করুন


3

আদিত্য বা অন্যরা, আপনি কি উদাহরণে টি 1 দিয়ে টি 2 তে যোগ দিতে বা মিলিয়ে নিতে পারেন, অর্থাত আমার কোডে অনুবাদ করেছেন,

with t1 as (select * from AA where FIRSTNAME like 'Kermit'),
     t2 as (select * from BB B join t1 on t1.FIELD1 = B.FIELD1)

যোগদানের জন্য কেবল WHERE সমর্থিত কিনা, বা 2 য় WITH সত্তার মধ্যে কোন যোগদানের পদ্ধতির সমর্থিত কিনা তা আমি স্পষ্ট নই। উদাহরণগুলির মধ্যে কয়েকটিতে শুল্কগুলির সাথে নীচে "নীচে" নির্বাচন করে শৃঙ্খলাবদ্ধ স্থানে A = B রয়েছে।

এই ঘোষণাপত্রগুলির সাথে আমি যে ত্রুটিটি পাচ্ছি তা হ'ল বি এর শনাক্তকারী (ক্ষেত্রের নামগুলি) স্বীকৃত নয়, এসকিউএল এর বাকী অংশের মূল অংশে। সুতরাং বাক্য সিনট্যাক্সটি ঠিক আছে বলে মনে হচ্ছে তবে টি 2 থেকে ফলাফল অ্যাক্সেস করতে পারে না।


টিজ 2 এর সাথে আপনাকে ক্লজটি দিয়ে আলিয়া টি 1 করতে হবে
বেন

সাব কোয়েরিতে আমি কীভাবে ক্লজ টেবিলের সাথে রেফারেন্স করতে পারি? এটি একটি ত্রুটি নিক্ষেপ করছে। উদাহরণস্বরূপ, SET1 AS হিসাবে (ডুয়াল থেকে সিস্টেম নির্বাচন করুন), - SET1 সূচনা SET2 AS হিসাবে (SET1 থেকে নির্বাচন করুন) - SET1 অ্যাক্সেস সেলেক্ট * SET2 বাম বাইরে থেকে যোগদান করুন (SET1 থেকে * সিলেক্ট করুন = এখন ()) সেট 3 চালু set1.sysdate = set3.sysdate;
রূপসা সুষমা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.