sql >> Databáze >  >> RDS >> Sqlserver

Chyba SQL Server 2005 při seskupování pomocí poddotazu

Pro začátek, pokud uvedeme úplnou chybu, mělo by to znít „Každý výraz GROUP BY musí obsahovat alespoň jeden sloupec, který není vnějším odkazem. "

."

Abychom porozuměli chybě, musíme si ujasnit, co znamená 'vnější odkaz'

(Poznámka:v tomto případě to nemá nic společného s vnitřním nebo vnějším spojením)

Vnitřní a vnější odkazují na hlavní dotaz a jeho poddotazy. V tomto případě EXISTS je poddotaz a je to korelovaný poddotaz, protože má vnější odkaz #header.header , která odkazuje na vnější tabulku #header , zatímco jakýkoli odkaz na #detail by byly považovány za vnitřní odkazy.

Takže v podstatě, protože CASE využívá korelovaný poddotaz, který odkazuje na vnější dotaz, pak to spustí chybový stav, protože tato chybová zpráva se objeví, když se pokusíte použít pouze výrazy v klauzuli GROUP BY, které jsou interpretovány jako vnější odkazy.

Dílčí dotazy mohou být použit v GROUP BY, ale ne v korelovaných poddotazech.

Je matoucí, že stejná chyba může být generována jednodušším dotazem bez dílčího dotazu, jako je

select 
 case when header=1 then 1 
      else 0 
 end headeris1, 
 'constant' 
from #header 
group by case when header=1 then 1 else 0 end , 'constant'

nebo dokonce nahrazením konstanty @variable

Jasné jako bláto?

Kev



  1. Způsoby, jak se vyhnout synchronizaci příkazů MySQLdb; tento příkaz nelze spustit nyní (2014) výjimka

  2. Provádím n ne. procesů, kde n je, může být mezi 5 - 50. Každý proces provádí několik dml operací na postgres

  3. Získání seznamu funkcí a podpisu procedur z oracle

  4. filtr špatných slov napsaný nativní v MYSQL bez php