मैं CTE क्वेरी का उपयोग करके तालिका से सभी माता-पिता और बच्चों की पंक्तियों को खोजने के लिए एक क्वेरी बनाने की कोशिश कर रहा हूं।
मैं या तो माता-पिता को खोज सकता हूं और बच्चों को वापस कर सकता हूं या बच्चों को खोज सकता हूं और माता-पिता को वापस कर सकता हूं लेकिन मैं एक क्वेरी में दोनों संभावनाओं को नहीं संभाल सकता।
मैं केवल सभी प्रश्नों में से एक को पूरा कर सकता हूं।
मुझसे कहां गलती हो रही है?
declare @search nvarchar(50)
--set @search = '%Nucleus sub project%';
set @search = '%Nucleus test';
WITH Parent AS
(
SELECT *
FROM tblProjects
WHERE ProjNo LIKE @search
OR ProjDes LIKE @search
UNION ALL
SELECT tblProjects.*
FROM tblProjects
JOIN Parent ON tblProjects.proID = Parent.ParentProjID
UNION ALL
SELECT tblProjects.*
FROM tblProjects
JOIN Parent ON tblProjects.ParentProjID = Parent.proID
)
SELECT distinct *
FROM Parent
ORDER BY ParentProjID
मुझे एक त्रुटि मिली:
बयान समाप्त हुआ। बयान पूरा होने से पहले अधिकतम पुनरावृत्ति 100 समाप्त हो गई है।
2 जवाब
दो अलग-अलग सीटीई का उपयोग करने का प्रयास करें:
WITH x AS (
SELECT p.*
FROM tblProjects p
WHERE ProjNo LIKE @search OR ProjDes LIKE @search
),
parents as (
SELECT *
FROM x
UNION ALL
SELECT p.*
FROM parents JOIN
tblProjects p
ON p.parentid= parents.proID
),
children as (
SELECT *
FROM x
UNION ALL
SELECT p.*
FROM children JOIN
tblProjects p
ON children.parentid = p.proID
)
SELECT distinct *
FROM parents
UNION
SELECT distinct *
FROM children;
यूनिअन ऑल के बाद दूसरा चयन रीसर्चली कहा जाता है जब तक कि परिणाम सेट में अधिक पंक्तियों को नहीं जोड़ा जाता है।
इसलिए;
- आपको तीसरे चयन कथन की आवश्यकता नहीं है। दूसरे को सब कुछ पकड़ना चाहिए।
- यदि आपके पास साइकिल है (उदाहरण के लिए, A का जनक B है; B का माता-पिता A है) तो आपको एक अनंत पुनरावृत्ति मिलेगी, और SQL 100 पुनरावृत्तियों के बाद छोड़ देगा, जिससे आपको अधिकतम पुनरावृत्ति त्रुटि होगी।
चक्रों का पता लगाना अधिक जटिल है, लेकिन किया जा सकता है।
संबंधित सवाल
नए सवाल
sql-server
Microsoft SQL सर्वर एक रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) है। कॉम्पैक्ट, एक्सप्रेस, एज़्योर, फास्ट-ट्रैक, एपीएस (पूर्व में पीडीडब्ल्यू) और एज़्योर SQL डीडब्ल्यू सहित सभी SQL सर्वर संस्करणों के लिए इस टैग का उपयोग करें। अन्य प्रकार के DBMS (MySQL, PostgreSQL, Oracle, आदि) के लिए इस टैग का उपयोग न करें। सॉफ़्टवेयर और मोबाइल विकास के मुद्दों के लिए इस टैग का उपयोग न करें, जब तक कि यह सीधे डेटाबेस से संबंधित न हो।