SQL Server'da iç içe seçme deyimi


388

Aşağıdakiler neden çalışmıyor?

SELECT name FROM (SELECT name FROM agentinformation)

Sanırım SQL anlayışım yanlış, çünkü bunun aynı şeyi döndüreceğini düşünürdüm

SELECT name FROM agentinformation

İnner select ifadesi, dış SELECT ifadesinin sorguladığı bir sonuç kümesi oluşturmuyor mu?

Yanıtlar:


673

Alt sorguyu diğer ad olarak adlandırmanız gerekir.

SELECT name FROM (SELECT name FROM agentinformation) a  

veya daha açık olmak gerekirse

SELECT a.name FROM (SELECT name FROM agentinformation) a  

76
Takma adınızın da biraz ayrıntılı olduğundan emin olun! T1, t2, t3, t4, t5, t6 ile bir wuery üzerinde çalıştığımda seviyorum
Doug Chamberlain

2
whereDış sorgu için bir madde nereye gider?
Albay Panik

3
@ColonelPanic: Dış sorgunun WHERE yantümcesi en sonunda işlenir.
Joe Stefanelli

"Doğru, ben bir aptalım! Teşekkürler, izin verildiğinde kabul edeceğim." Hayır. Sadece cahil. Hepimiz gibi.
Lucio Mollinedo

2
Oracle, ilk selectadı takma ad olmadan kabul eder .
Kjetil S.

49

Cevap Joe Stefanelli tarafından sağlanan zaten doğrudur.

SELECT name FROM (SELECT name FROM agentinformation) as a  

Bir sorgu, alt sorgu için bir takma ad yapmaktan alacağımız bir tablo nesnesine ihtiyaç duyduğundan alt sorgu için bir takma ad yapmamız gerekir. Kavramsal olarak, alt sorgu sonuçları dış sorguyla değiştirilir. Dış sorguda bir tablo nesnesine ihtiyaç duyduğumuz için, iç sorgunun diğer adını yapmamız gerekir.

Bir alt sorgu içeren ifadeler genellikle şu formlardan birini alır:

  • WHERE ifadesi [NOT] IN (alt sorgu)
  • NEREDEN ifade karşılaştırma_operatör [ANY | ALL] (alt sorgu)
  • [DEĞİL] NEREDE (alt sorgu)

Diğer alt sorgu kuralları ve alt sorgu türlerini kontrol edin .

Yuvalanmış Alt Sorgulara daha fazla örnek .

  1. IN / NOT IN - Bu işleç, iç sorgu yürütüldükten sonra sıfır veya daha fazla değer olabilen iç sorgunun çıktısını alır ve dış sorguya gönderir. Dış sorgu daha sonra eşleşen [IN operatörü] veya eşleşmeyen [NOT IN operatörü] satırlarını getirir.

  2. ANY - [> ANY veya ANY operatörü, iç sorgu tarafından üretilen değerlerin listesini alır ve listenin minimum değerinden büyük olan tüm değerleri getirir.

örneğin> HERHANGİ BİR (100,200,300), HERHANGİ BİR operatör 100'den büyük tüm değerleri getirir.

  1. ALL - [> ALL veya ALL operatörü, iç sorgu tarafından üretilen değerlerin listesini alır ve listenin maksimum değerinden büyük olan tüm değerleri getirir.

örneğin> ALL (100,200,300), ALL operatörü 300'den büyük tüm değerleri getirir.

  1. EXISTS - EXISTS anahtar sözcüğü bir Boole değeri [TRUE / FALSE] üretir. Bu EXISTS, alt sorgu tarafından döndürülen satırların varlığını kontrol eder.
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.