আমি কীভাবে একটি একক নির্বাচিত বিবৃতিতে একাধিক সাধারণ টেবিল এক্সপ্রেশন পেতে পারি?


94

আমি একটি জটিল নির্বাচনী বিবৃতি সহজ করার প্রক্রিয়াধীন, সুতরাং আমি সাধারণ টেবিল এক্সপ্রেশন ব্যবহার করব।

একটি সিটি ঘোষণা ভাল কাজ করে।

WITH cte1 AS (
    SELECT * from cdr.Location
    )

select * from cte1 

একই সিলেক্টে একাধিক সিটি ঘোষণা এবং ব্যবহার করা সম্ভব?

অর্থাত্ এই এসকিএল একটি ত্রুটি দেয়

WITH cte1 as (
    SELECT * from cdr.Location
)

WITH cte2 as (
    SELECT * from cdr.Location
)

select * from cte1    
union     
select * from cte2

ত্রুটি হয়

Msg 156, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'WITH'.
Msg 319, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

এনবি। আমি সেমিকোলনগুলি inোকানোর চেষ্টা করেছি এবং এই ত্রুটিটি পেয়েছি

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ';'.
Msg 102, Level 15, State 1, Line 9
Incorrect syntax near ';'.

সম্ভবত প্রাসঙ্গিক নয় তবে এটি এসকিউএল ২০০৮-এ।

উত্তর:


141

আমি মনে করি এটির মতো কিছু হওয়া উচিত:

WITH 
    cte1 as (SELECT * from cdr.Location),
    cte2 as (SELECT * from cdr.Location)
select * from cte1 union select * from cte2

মূলত, WITHএখানে কেবল একটি ধারা রয়েছে এবং অন্যান্য ধারাগুলির মতো যা তালিকাগুলি গ্রহণ করে, "," উপযুক্ত ডিলিমিটার।


সেটা খুবই ভালো. আমি সিটিইর ফলাফলগুলি দিয়ে টেম্প টেবিলগুলি পূরণ করছিলাম এবং পরে সংযুক্ত করেছিলাম, তবে কোনও সঞ্চিত প্রোকে প্যাকেজিংয়ের সময় আধা কলোনগুলির সাথে সমস্যায় পড়েছিলাম। দুর্দান্ত পদ্ধতি!
টম হাল্লাদে

18
ভুলে যাবেন না যেমন cte2রেফারেন্স করতে cte1পারে: ... সিটি 2 হিসাবে (নির্বাচন করুন সিটি 1 থেকে নির্বাচন করুন ...)
চক

বীর! এটি আমাকে কয়েক ঘন্টা ধরে
আটকে রেখেছে

4
পুনরাবৃত্ত এবং অ-পুনরাবৃত্ত প্রকাশের ঘোষণা সম্পর্কে কী?
দিমিত্রি ভোলকভ

15

উপরে উল্লিখিত উত্তর সঠিক:

WITH 
    cte1 as (SELECT * from cdr.Location),
    cte2 as (SELECT * from cdr.Location)
select * from cte1 union select * from cte2

প্রশাসনিকভাবে, আপনি সিটি 2 থেকে সিটি 1 থেকেও জিজ্ঞাসা করতে পারেন:

WITH 
    cte1 as (SELECT * from cdr.Location),
    cte2 as (SELECT * from cte1 where val1 = val2)

select * from cte1 union select * from cte2

val1,val2 এক্সপ্রেশন জন্য কেবল অনুমিতি ..

আশা করি এই ব্লগটিও সহায়তা করবে: http://iamfixed.blogspot.de/2017/11/common-table-expression-in-sql-with.html


পুনরাবৃত্ত এবং অ-পুনরাবৃত্ত প্রকাশের ঘোষণা সম্পর্কে কী?
দিমিত্রি ভোলকভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.