Delphi - SQL - Zobrazenie záznamov podľa podmienky
Mám tabuľky:
Pracovnik.db
ID autoinc
Meno varchar(25)
Skryt boolean
Praca.db
ID autoinc
Nazov varchar(25)
Skryt boolean
Praca_pracovnik.db
ID autoinc
PRACOVNIK_ID integer
PRACA_ID integer
Priorita integer
Skryt boolean
Pre tabuľku Praca_pracovnik.db som nastavil toto:
select
*
from
Praca_pracovnik.db, Pracovnik.db, Praca.db
where
Skryt = false
and PRACOVNIK_ID = (Pracovnik.db.ID)
order by
ID
Problém spočíva v tom, že sa mi zobrazia aj záznamy, kde sa PRACOVNIK_ID nerovná Pracovnik.ID a už z toho idem zošedivieť.
Tu je výsledok príkazu:
http://img267.imageshack.us/img267/2881/schrnka01ue 8.gif
Edit 1:
A keď tam dám nasledujúci riadok, tak je výsledok prázdna tabuľka:
and PRACOVNIK_ID = (Pracovnik.db.ID) and PRACA_ID = (Praca.db.ID)
Ak sa nemýlim, malo by mi zobraziť tabuľku Praca_pracovnik, ale miesto ID kódov by malo dosadiť Meno a Nazov (samozrejme, ak nebude za select *, ale len vybrané položky).
Edit 2:
Pre lepšie vysvetlenie:
Nesmie sa rovnať ID a PRACOVNIK_ID, ale PRACOVNIK_ID a ID_1. ID_1 je v skutočnosti Pracovnik.db.ID.
Ak zadám nasledujúci riadok, tak dostanem Invalid field name ID_1:
and PRACOVNIK_ID = (ID_1)
Pokud provadis dotaz nad vice tabulkami, musis v tabulce uvadet v pominkach i jmeno tabulky. To jsi neudelal.
Dale je vhodne specifikovat pole, ktere ma dotaz vratit. Nema smysl vracet ID ze vsech tabulek, protoze tam budou 2x.
Stále nepomohlo.
A tú hviezdičku za select mám len preto, aby som najprv urobil správnu podmienku. Potom samozrejme vyselektujem správne položky. To už mám aj pripravené, len zapoznámkované - //. Ide o to, že som nechápal, prečo sa to tak správa, tak som zapoznámkoval selektovanie. Po zmene SQL príkazu v časti where mám výsledok ten istý.
Nelibi se mi tam to .db.
To je fyzicky nazev tabulky. Dej to pryc.
udelal jsi tu podminku jak jsem ji napsal v prikladu? Spoujes tam 3 tabulky, takze tam musi byt podminky pres ID pro vsechny 3 tabulky, jinak to udela kartezsky soucin.
1. Vyhodil som zo sekcie from tretiu tabuľku. No a výsledok je taký, že opäť mi našlo záznamy, kde Praca_pracovnik.db.ID = Praca_pracovnik.db.PRACOVNIK_ID.
2. Máš pravdu, problém bol v .db. Odstránil som to zovšadiaľ a ide to. Lenže ja názov s príponou .db využívam aj na kontrolu existencie súborov, takže to budem musieť upraviť a príponu písať ručne. Vyriešené. Ďakujem.
Co ma kontrola souboru společného s SQL dotazem?
Pokud dotaz skládáš a chceš am dostat nazvy souborů z nějakých proměnných, použij funkci
ChangeFileExt(jmeno_s_priponou, '')
Další možnost je (a takto se to obvykle dělá), že použiješ v dotazu aliay tabulek, zvlášť, když máš tak kravsky dlouhá jména tabulek:
Ber to jako příklad, pro aliasy bys měl použít nějaké rozumnější jména, zvlášt u komplikovanějších dotazů. Např:
Nemá nič spoločné. Ja som len na začiatku programu testoval fyzickú prítomnosť súborov na disku (tam treba aj príponu). Potom tie isté premenné s názvami som použil na vloženie do SQL príkazu do časti FROM. SQL to zožralo, tak som to nechal tak. Teraz to musím urobiť tak, že príponu budem pridávať navyše pomocou operátora +.