Birden çok “birlikte” kullanabilir miyim?


200

Sadece örneğin:

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
)

... çalışmıyor. Msgstr "İle yakın hata".

Ayrıca, önce iç saniye ile birlikte kullanmak istiyorum. Gerçek mi yoksa geçici tabloları mı kullanmam gerekiyor?


1
BOL de tam sözdizimine sahiptir. msdn.microsoft.com/en-us/library/ms175972%28v=SQL.100%29.aspx Uyarı [ ,...n ].
CVn

Yanıtlar:


345

Deneyin:

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
)

Ve evet, ortak tablo ifadesi tanımı içinde ortak tablo ifadesine başvurabilirsiniz. Özyineli olarak bile. Bu da bazı düzgün hilelere yol açar .


30
Hemen benim gibi fark etmeyenler için, burada yakalamak açıklama ile orijinal sonra bir virgül ekliyor .. lol
CRSouser

11
ve kelimeyi withtekrar
yazmamak

Merhaba, bu iki tablo arasında bir çapraz birleşimine eşdeğerdir. Yoksa iki ayrı tablo oluşturur. İki çok büyük tabloyu birleştirmek istemezdim, verimli bir şekilde iki ayrı "ile" tablo oluşturmanın bir yolu var
Long Le

1
@ LongLe Hayır, birleştirmelere eşdeğer değildir ve tablo değildir. Bunlar CTE'ler - Ortak Tablo İfadeleridir. Bunlar daha çok ... tablolar gibi kullanabileceğiniz adlandırılmış sorgular gibidir ... ya da daha çok görünümler gibidir. Lütfen onları google. Düzenli. Karmaşık sorguları anlaşılabilir ve kontrol altında tutmaya büyük ölçüde yardımcı olan en iyi standart SQL özelliklerinden biridir.
Tomek Szpakowicz

'Ortak tablo ifadelerinin' ne olduğunu bilmeyenler için, verilen örnekte 'DependencedIncidents' ve 'lalala'dır. Ayrıntılar için bkz. Docs.microsoft.com/en-us/sql/t-sql/queries/… .
Henry Yang

112

Evet - şu şekilde yapın:

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

WITHAnahtar kelimeyi tekrarlamanız gerekmez


13
Lala, DependencedIncidents'i kullanabilir mi?
Bren

DependencedIncidents lalala kullanabilir mi?
Henry Yang

3
@HenryYang: hayır - daha sonraki CTE ( lalala) kendisinden önce tanımlanan herhangi bir CTE'yi kullanabilir - ancak daha önce yalnızca daha sonra tanımlanacak bir CTE kullanamaz ....
marc_s
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.