Hej Jeg sidder med "Database System Concepts" af Silberschatz og forsøger at lære noget SQL. Jeg benytter Oracle SQL Developer og til formålet er der oprettet en database der er magen til den der bliver brugt som eksempel i bogen.
Jeg har dog rendt ind i nogle problemer angående omdøbning. Her er et eksempel taget direkte fra bogen som SQL developer ikke accepterer. Jeg får fejlen "SQL-kommando er ikke korrekt afsluttet":
Håber i kan hjælpe mig Mvh Carsten
SELECT branch_name, avg_balance FROM (SELECT branch_name, AVG (balance) FROM account GROUP BY branch_name) AS branch_avg(branch_name, avg_balance) WHERE avg_balance > 1200
SELECT branch_name, avg_balance FROM (SELECT branch_name, AVG (balance) AS avg_balance FROM account GROUP BY branch_name) AS branch_avg WHERE avg_balance > 1200
Den HAVING det er bare fordi jeg sidder og laver nogle opgaver hvor man ikke skal bruge HAVING. Så må jeg jo pænt lade være :)
SELECT branch_name, avg_balance FROM (SELECT branch_name, AVG (balance) AS avg_balance FROM account GROUP BY branch_name) AS branch_avg WHERE avg_balance > 1200
Virker desværre heller ikke. Her er fejl meddelelsen i sit hele:
Error starting at line 1 in command: SELECT branch_name, avg_balance FROM (SELECT branch_name, AVG (balance) AS avg_balance FROM account GROUP BY branch_name) AS branch_avg WHERE avg_balance > 1200 Error at Command Line:5 Column:6 Error report: SQL Error: ORA-00933: SQL-kommando er ikke korrekt afsluttet 00933. 00000 - "SQL command not properly ended" *Cause: *Action:
SELECT branch_name, avg_balance FROM (SELECT branch_name, AVG (balance) AS avg_balance FROM account GROUP BY branch_name); AS branch_avg WHERE avg_balance > 1200
Giver mig følgende:
BRANCH_NAME AVG_BALANCE --------------- ---------------------- Round Hill 350 Mianus 700 Perryridge 650 Redwood 700 Brighton 750 Central 850 Downtown 515 North Town 625
8 rows selected
Error starting at line 5 in command: AS branch_avg Error report: Unknown Command
Error starting at line 6 in command: WHERE avg_balance > 1200 Error report: Unknown Command
SELECT branch_name, avg_balance FROM (SELECT branch_name, AVG (balance) AS avg_balance FROM account GROUP BY branch_name); AS branch_avg WHERE avg_balance > 1200
men
SELECT branch_name, avg_balance FROM (SELECT branch_name, AVG (balance) AS avg_balance FROM account GROUP BY branch_name) AS branch_avg WHERE avg_balance > 1200;
Ah ok. Jeg synes ikke jeg har oplevet at skulle bruge semikolon i de her simple forsøg før. Semikolon til sidst giver mig samme fejl som min indledende post.
Er er account et keyword? det bliver farvet blåt i SQL Developer, men det er en tabel i databasen.
Forsøgte mig også lige med: SELECT max(tot_balance) FROM (SELECT branch_name, sum(balance) AS tot_balance FROM account GROUP BY branch_name) AS branch_total(branch_name, tot_balance
Hvilket giver samme fejl. Kan åbenbart ikke navngive på den måde.
SELECT branch_name, avg_balance FROM (SELECT branch_name, AVG (balance) AS avg_balance FROM account GROUP BY branch_name) WHERE avg_balance > 1200;
Teknisk set burde dette være nok (ingen nestede selects): SELECT branch_name, AVG(balance) AS avg_balance FROM account WHERE avg_balance > 1200 GROUP BY branch_name;
Hej. Jeg har haft problemer med at poste på eksperten, derfor det sene svar.
SELECT branch_name, avg_balance FROM (SELECT branch_name, AVG (balance) AS avg_balance FROM account GROUP BY branch_name) WHERE avg_balance > 1200;
Fungerer. Men jeg har brug for at navngive den tabel der bliver skabt af den indre selektion til en mere kompliceret opgave. Tror jeg nok, jeg sidder ikke lige med det her så jeg vil undersøge det næremere i aften. Men det undrer mig at man ikke kan gøre det som eksemplet fra bogen, der bygger på 2003 standarden - Men der kan selvfølgelig godt være forskelle mellem implementeringer alligevel.
Problemet er at du vil omdøbe en tabel ved hjælp af keywordet AS. AS bruges til at omdøbe kolonnenavne hvorimod der ikke skal bruges noget keyword for at omdøbe et tabelnavn. Følgende stump skulle gerne virke.
SELECT branch_name, avg_balance FROM (SELECT branch_name, AVG (balance) AS avg_balance FROM account GROUP BY branch_name) branch_avg WHERE avg_balance > 1200
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.