FROM içindeki alt sorgu bir takma ada sahip olmalıdır


92

PostgreSQL'de yazdığım ve şunu söyleyen bir hata döndüren bir sorgu var:

[Err] HATA:
SATIR 3: (DISTINCT SEÇİN (tanımlayıcı) AS made_only_recharge

Sorgunun tamamı budur:

SELECT COUNT (made_only_recharge) AS made_only_recharge
FROM (
    SELECT DISTINCT (identifiant) AS made_only_recharge
    FROM cdr_data
    WHERE CALLEDNUMBER = '0130'
    EXCEPT
    SELECT DISTINCT (identifiant) AS made_only_recharge
    FROM cdr_data
    WHERE CALLEDNUMBER != '0130'
)

Oracle'da iyi çalışan benzer bir sorgum var. EXCEPTOracle'da sahip olduğum tek değişiklik, onu MINUSanahtar kelimeyle değiştirdim. Postgres'te yeniyim ve ne istediğini bilmiyorum. Bununla başa çıkmanın doğru yolu nedir?


3
Bu istisna gereksiz bana bakıyor ilk olarak nerede zaten fıkra excepts it: CALLEDNUMBER = '0130'.
Clodoaldo Neto

Bu hata Postgres 11 FWIW ...
rogerdpack 18'19

Yanıtlar:


134

ALIASalt sorguya bir ekleyin ,

SELECT  COUNT(made_only_recharge) AS made_only_recharge
FROM    
    (
        SELECT DISTINCT (identifiant) AS made_only_recharge
        FROM cdr_data
        WHERE CALLEDNUMBER = '0130'
        EXCEPT
        SELECT DISTINCT (identifiant) AS made_only_recharge
        FROM cdr_data
        WHERE CALLEDNUMBER != '0130'
    ) AS derivedTable                           -- <<== HERE

18
@JohnWoo bunun için teşekkürler, ama neden gerekli (sanırım burada bir teori sorusu soruyorum)?
Andrew Cassidy

1
@AndrewCassidy Sorgunuza daha fazla kısıtlama ekleyebilmeniz için tanımlamalısınız (WHERE derivedTable. <Öznitelik> = 5). aksi takdirde
veritabanınız

37
@AndrewCassidy Sadece şanssız bir sözdizimi. Bu alt sorguya başvurmadığınız sürece, takma adının ne olduğu önemli değildir. Şahsen ben kullanıyorum AS pg_sucks, "peki, burada fazladan bir tanımlayıcınız var, ama bazılarını kendi kendinize dahili olarak oluşturabilirsiniz, lanet olası posterler!" :)
Tregoreg

1

İç içe geçmiş tablolar söz konusu olduğunda, bazı DBMS MySQL ve Oracle gibi bir takma ad kullanmayı gerektirir, ancak diğerlerinin bu kadar katı bir gereksinimi yoktur, ancak yine de iç sorgunun sonucunun yerini alması için bunların eklenmesine izin verir.


1
Sizin ifadeler var önermek olduğunu Oracle ve MySQL ikisi için böyle bir gereklilik. Doğru mu okuyorum?
Scratte

@Scratte Sanırım haklısın ve ifadeler tersine döndü. "MySQL ve Oracle ancak diğerleri" "Postgresql, ancak MySQL ve Oracle gibi diğer ssuch" olmalı diye düşünüyorum. Elbette bu hala geçici bir cümle ve daha da geliştirilebilir. 2013 cevabı gayet iyi ve bu cevap hiçbir şey eklemiyor (gerekirse 2013 cevabına yorum yapın), bu yüzden ikincisi kaldırılmalıdır.
Sınırlı Kefaret
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.