2012-10-02 15 views
6

Następująca kwerenda działa:„z ... jako” SQL Navigator

select count(*) from everything where num not in (select num from sometable) 

Poniższe zapytanie ma być równoważne do powyższych, ale skutkuje „nieprawidłowy identyfikator” Błąd:

with unwanted as (select num from sometable) 
select count(*) from everything where num not in unwanted 

Co jest nie tak z drugim zapytaniem?

Odpowiedz

7

składnia jest tak:

with unwanted as (select num from sometable) 
select count(*) from everything where num not in (select * from unwanted) 

oczywiście to ma sens tylko wtedy, gdy select num from sometable część jest nieco bardziej złożone lub używane kilka razy później ...

+0

Zaakceptowałem twoją odpowiedź. Mimo to, czy możesz dodać wyjaśnienie, dlaczego "wybierz * od niechcianych" nie jest tym samym, co "niechciane"? Dzięki. – snakile

+0

Klauzula składnia może być postrzegana jako równoważna z widokiem lub tabelą, z wyjątkiem tego, że jest zdefiniowana dynamicznie w czasie wykonywania i nie jest zdefiniowana statycznie jako widok lub tabela. Użycie i składnia w sql jest zawsze taka sama, a nazwa klauzuli "with", tabela i widok może być używana zamiennie. –

2

Można również dołączyć do tabel wyższa wydajność

WITH unwanted 
AS 
(
    SELECT num 
    FROM sometable 
) 
SELECT COUNT(*) 
FROM everything a 
     LEFT JOIN unwanted b 
      ON a.num = b.num 
WHERE b.num IS NULL 
Powiązane problemy