Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem SQL Firebird dotaz na kravinku

Uvažujme tento (Firebird) SQL dotaz:

 select cast(lsd.OrdNumber as integer), fi.Name,    ib_decodedate_day(lsd.Docdate$date) || '.' || ib_decodedate_month(lsd.Docdate$date) || '.' ||    ib_decodedate_year(lsd.Docdate$date),    
    lsd.id, lsd.X_ZPRACOVAL_TERMINAL from LogStoreDocuments lsd, Firms fi  , logstoredocuments2 where LogStoreDocuments2.Parent_id =  LogStoreDocuments2.id and lsd.Firm_ID = fi.ID and lsd.x_zpracoval_terminal <> 'A' and (lsd.documentType = 31 and lsd.x_uzamkl = '' OR lsd.x_uzamkl = '&C6' and Logstoredocuments2.Store_ID = '5100000101' )
   
    

Dotaz funguje ale...... !

Protože obsahuje duplicitní řádky, pokouším se je eliminovat doplněním na konec group by:

group by lsd.id

Pak na mě háže tuto chybu: Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

To by byl první dotaz.
A druhý dotaz je, zda lsd.id je příslušné k ostatním řádkům z první tabulky ?!
Protože ty dvě tabulky nejsou spárovány pomocí left join.

Zkoušeli jsme to přes left join, ale dotaz trval neúměrně dlouho.

Předmět Autor Datum
Ty tam máš tabulky LogStoreDocuments a LogStoreDocuments2?
Wikan 03.04.2013 18:49
Wikan
Ano. A nemám je tam já, ale návrháři ERP systému. Netřeba rozvádět, že LogStoreDocuments je tabulka…
Flash_Gordon 03.04.2013 19:15
Flash_Gordon
V tom případě tam nikde nevidím spojení těch dvou tabulek.
Wikan 03.04.2013 19:16
Wikan
To tam taky nevidím :-) Výsledek se ale tváří konzistentně, stejně jako šéf, který mi s dotazem "po…
Flash_Gordon 03.04.2013 19:28
Flash_Gordon
Proč tam spojuješ tabulky STOREDOCUMENTS, FIRMOFFICES a addresses? V původním dotazu je taky nemáš a…
Wikan 03.04.2013 19:34
Wikan
FIRMOFFICES a addresses budu potřebovat dotahovat taky. V původním dotazu je nemám z důvodu zjednodu…
Flash_Gordon 03.04.2013 19:38
Flash_Gordon
Tak to přepiš jenom na joiny. poslední
Wikan 03.04.2013 19:39
Wikan

To tam taky nevidím :-)

Výsledek se ale tváří konzistentně, stejně jako šéf, který mi s dotazem "pomohl" :-) .

Proto se na to ptám.

Díky za každou radu.

Původní dotaz vypadal takto:

     select cast(lsd.OrdNumber as integer), fi.Name,   
      ib_decodedate_day(lsd.Docdate$date) || '.' || ib_decodedate_month(lsd.Docdate$date) || '.' || ib_decodedate_year(lsd.Docdate$date),
         lsd.id, addresses.city ||' '|| addresses.Street ||' ' || addresses.PostCode
            from LogStoreDocuments lsd
              left join Firms fi on  lsd.Firm_ID = fi.ID  
    left join STOREDOCUMENTS on lsd.STOREDOCUMENT_ID = STOREDOCUMENTS.ID  
    left join FIRMOFFICES on FIRMOFFICES.ID = STOREDOCUMENTS.FIRMOFFICE_ID  
    left join addresses on FirmOffices.ADDRESS_ID = addresses.id 
    left join logstoredocuments2 on logstoredocuments2.parent_id = logstoredocuments.id 
       where lsd.Firm_ID = fi.ID and    lsd.x_zpracoval_terminal <> 'A' and lsd.documentType = 32 and 
 (lsd.x_uzamkl = '' OR lsd.x_uzamkl = '&C6') and logstoredocuments2.store_id = 'sklad9' order by lsd.OrdNumber

ale potřebovali jsme tam udělat podmínku na sklad, který je uložen až bohužel u příslušných řádků ! (Tedy až u LogStoreDocuments2)
A s touto podmínkou trvá dotaz neúměrně dlouho.

Zpět do poradny Odpovědět na původní otázku Nahoru