Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno SQL v MS Access

Dobrý den,
potřebuji udělat update tabulky v MS Access a nějak se mi nedaří.

SQL dotaz

UPDATE auto_vypis SET auto_vypis.ridic = spravci.id
  WHERE auto_vypis.ridic <> "volno" AND EXISTS   
  (SELECT id FROM spravci WHERE auto_vypis.ridic = spravci.surename);

by měl být asi správně, ale když ho v Access spustím, tak se mi zobrazí okno s dotazen na zadání hodnoty parametru spravci.id.

Přitom v nápovědě k Access jsou poddotazy s exists uvedené jako možné. A chybu tam přímo nevidím.

Předmět Autor Datum
přepni si ten výraz do návrhového zobrazení, tipuju, že "správci.id" je nekorektně zadán - nemáš def…
touchwood 23.04.2008 08:34
touchwood
Teď moc nerozumím, pro poddotaz je třeba zadávat relaci? Když se přepnu do návrhového zobrazení, ta…
yorg 23.04.2008 08:54
yorg
přidej v návrhovém režimu tab. správci a zkontroluj, zda se zobrazí relace a pak se zkus kouknout zp…
touchwood 23.04.2008 09:18
touchwood
Jednak jsem zjistil, že ty zbytky paměti jsou chabé a chyběl tam Select pro výběr hodnoty 3-[ UPDAT…
yorg 23.04.2008 09:55
yorg
Podle mne by melo stacit tohle: UPDATE auto_vypis SET auto_vypis.ridic = spravci.id WHERE auto_vypi…
Jan Fiala 23.04.2008 09:39
Jan Fiala
Tím jsem začal, ale bohužel to nefunguje. Končí to dialogem pro zadání spravci.id. Pak jsem začal up…
yorg 23.04.2008 10:13
yorg
Nakonec pomohlo to návrhové zobrazení a přidání tabulky spravci do dotazu včetně relace. UPDATE aut…
yorg 23.04.2008 10:23
yorg
Jasne, protoze tam chyby uplne FROM :-( UPDATE auto_vypis SET auto_vypis.ridic = spravci.id FROM au… poslední
Jan Fiala 23.04.2008 10:27
Jan Fiala
A v tabulce spravci je sloupec ID ?
Jan Fiala 23.04.2008 10:24
Jan Fiala

Teď moc nerozumím, pro poddotaz je třeba zadávat relaci?

Když se přepnu do návrhového zobrazení, tak vidím jen tabulku auto_vypis, zbytek je (podle mě logicky, ale SQL Access mě vždy překvapuje, takže se mohu hodně mýlit:-/) ve where.

V tabulce spravci sloupec id existuje a je stejně jak sloupec ridic v tabulce auto_vypis v datovém typu text.

Občas vymetu zbytky paměti a dělám drobné věci v Informixu a MS SQL a tak mě vždy SQL v Access zaskočí.

Jednak jsem zjistil, že ty zbytky paměti jsou chabé a chyběl tam Select pro výběr hodnoty 3-[

UPDATE auto_vypis SET ridic = 
(SELECT DISTINCT id  FROM spravci 
     WHERE auto_vypis.ridic = spravci.surename)
WHERE auto_vypis.ridic <> "volno" AND EXISTS   
  (SELECT id FROM spravci 
     WHERE auto_vypis.ridic = spravci.surename);

proto se objevil původně ten dialog na doplnění spravci.id. Po doplnění mi to zase řve, že příkaz není spustitelný (patrně kvůli 1:N), co je sice pravda lidí se stejným příjmením je více, ale DISTINCT by to snad měl odfiltrovat a vrátit jen jednu hodnotu.

Zkoušel jsem to i s

SET ridic = (SELECT min( id)  FROM spravci 
   WHERE auto_vypis.ridic = spravci.surename 
   GROUP BY surename)

Výsledek je stejný.

Po doplnění tabulky spravci do návrhového zobrazení a nastavení relace mezi ridic a surename dostanu

UPDATE auto_vypis 
INNER JOIN spravci ON auto_vypis.ridic = spravci.surename 
SET auto_vypis.ridic = 
        (SELECT DISTINCT spravci.id  
         FROM spravci WHERE auto_vypis.ridic = spravci.surename)
WHERE (((auto_vypis.ridic)<>"volno") AND 
((Exists 
(SELECT id FROM spravci 
  WHERE auto_vypis.ridic = spravci.surename))<>False));

spuštění končí stejnou chybou.

Nakonec pomohlo to návrhové zobrazení a přidání tabulky spravci do dotazu včetně relace.

UPDATE auto_vypis 
  INNER JOIN spravci ON auto_vypis.ridic=spravci.surename 
  SET auto_vypis.ridic = spravci.id
WHERE (((auto_vypis.ridic)=spravci.surename 
         And (auto_vypis.ridic)<>"volno"));

Díky pánové.

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