ฉันสามารถใช้“ กับ” หลายอันได้หรือไม่?


200

ตัวอย่างเช่น:

With DependencedIncidents AS
(
    SELECT INC.[RecTime],INC.[SQL] AS [str] FROM
    (
        SELECT A.[RecTime] As [RecTime],X.[SQL] As [SQL] FROM [EventView] AS A 
        CROSS JOIN [Incident] AS X
            WHERE
                patindex('%' + A.[Col] + '%', X.[SQL]) > 0
    ) AS INC
)

With lalala AS
(
    SELECT INC.[RecTime],INC.[SQL] AS [str] FROM
    (
        SELECT A.[RecTime] As [RecTime],X.[SQL] As [SQL] FROM [EventView] AS A 
        CROSS JOIN [Incident] AS X
            WHERE
                patindex('%' + A.[Col] + '%', X.[SQL]) > 0
    ) AS INC
)

... ไม่ทำงาน "ข้อผิดพลาดใกล้กับ"

นอกจากนี้ฉันต้องการใช้ครั้งแรกกับภายในที่สองด้วย เป็นจริงหรือฉันต้องการใช้ตารางชั่วคราว


1
BOL มีไวยากรณ์ที่แน่นอนเช่นกัน msdn.microsoft.com/en-us/library/ms175972%28v=SQL.100%29.aspx[ ,...n ]หนังสือเชิญ
CVn

คำตอบ:


345

ลอง:

With DependencedIncidents AS
(
    SELECT INC.[RecTime],INC.[SQL] AS [str] FROM
    (
        SELECT A.[RecTime] As [RecTime],X.[SQL] As [SQL] FROM [EventView] AS A 
        CROSS JOIN [Incident] AS X
            WHERE
                patindex('%' + A.[Col] + '%', X.[SQL]) > 0
    ) AS INC
),
lalala AS
(
    SELECT INC.[RecTime],INC.[SQL] AS [str] FROM
    (
        SELECT A.[RecTime] As [RecTime],X.[SQL] As [SQL] FROM [EventView] AS A 
        CROSS JOIN [Incident] AS X
            WHERE
                patindex('%' + A.[Col] + '%', X.[SQL]) > 0
    ) AS INC
)

และใช่คุณสามารถอ้างอิงนิพจน์ตารางทั่วไปภายในนิยามนิพจน์ตารางทั่วไป ถึงแม้จะวนซ้ำ ซึ่งนำไปสู่บางอย่างเทคนิคเรียบร้อย


30
สำหรับคนที่ไม่ได้สังเกตว่ามันเหมือนตัวเองในทันทีจับที่นี่คือการเพิ่มเครื่องหมายจุลภาคหลังจากต้นฉบับที่มีคำสั่ง .. lol
CRSouser

11
และไม่เขียนคำwithอีกครั้ง
user230910

สวัสดีนี่เทียบเท่ากับ Cross Join ระหว่างสองตาราง หรือจะสร้างตารางแยกกันสองตาราง ฉันไม่ต้องการที่จะข้ามเข้าร่วมสองตารางที่มีขนาดใหญ่มากมีวิธีการสร้างสองแยก "กับ" ตารางที่มีประสิทธิภาพ
Long Le

1
@ LongLe ไม่พวกเขาไม่เท่ากับการรวมและไม่ใช่ตาราง เหล่านี้คือ CTEs - นิพจน์ตารางทั่วไป พวกเขาเป็นเช่น ... แบบสอบถามที่มีชื่อที่คุณสามารถใช้ราวกับว่าพวกเขาเป็นตาราง ... หรือมากกว่าเช่นมุมมอง โปรด google พวกเขา พวกเขาเรียบร้อย เป็นหนึ่งในฟีเจอร์ SQL มาตรฐานที่ดีที่สุดช่วยให้สามารถเข้าใจคำสั่งที่ซับซ้อนและควบคุมได้อย่างมหาศาล
Tomek Szpakowicz

สำหรับผู้ที่ไม่ทราบว่า 'ตารางนิพจน์ทั่วไป' คืออะไรพวกเขาคือ 'DependencedIncidents' และ 'lalala' ในตัวอย่างที่ให้ไว้ สำหรับรายละเอียดโปรดดูdocs.microsoft.com/en-us/sql/t-sql/queries/...
Henry Yang

112

ใช่ - ทำอย่างนี้:

WITH DependencedIncidents AS
(
  ....
),  
lalala AS
(
  ....
)

คุณไม่จำเป็นต้องทำซ้ำWITHคำหลัก


13
lalala สามารถใช้ DependencedIncidents ได้หรือไม่
Bren

DependencedIncident ใช้ lala หรือไม่
Henry Yang

3
@HenryYang: ไม่ - CTE ในภายหลัง ( lalala) สามารถใช้ CTE ใด ๆ ที่กำหนดไว้ก่อนหน้านี้ - แต่ CTE ก่อนหน้านี้ไม่สามารถใช้ CTE ใด ๆ ที่ก่อนหน้านี้ไม่สามารถใช้ CTE ที่จะถูกกำหนดไว้ในภายหลังเท่านั้น ....
marc_s
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.