Forum » Programiranje » SQL LEFT JOIN
SQL LEFT JOIN
ervinbocko ::
Pozdravljeni
Uspelo mi je sestaviti sledečo poizvedbo:
SELECT KATEGORIJE.name, POVEZAVE.catid, POVEZAVE.itemid, PODJETJA.title, PODATKI.data_txt
FROM ((KATEGORIJE LEFT JOIN POVEZAVE ON KATEGORIJE.catid=POVEZAVE.catid)
LEFT JOIN PODJETJA ON POVEZAVE.itemid=PODJETJA.itemid)
LEFT JOIN PODATKI ON PODJETJA.itemid=PODATKI.itemid
;
Težavo imam z tabelo PODATKI . V tej tabeli so vsi podatki o podjetjih, ločujejo se po »fieldid«.
Želel bi da mi izmed vseh podatkov izpiše samo email naslov podjetja, vendar pogoj »where PODATKI.fieldid="7"« ni v redu ker podjetje, katero nima emaila, nima polja s tem ID-jem in ga posledično ne izpiše.
Rabil bi pogoj, ki bi mi izpisal email poleg naziva podjetja ali ustvaril prazno polje če polje z emailom ne obstaja.
Hvala za pomoč
LP, Ervin
Uspelo mi je sestaviti sledečo poizvedbo:
SELECT KATEGORIJE.name, POVEZAVE.catid, POVEZAVE.itemid, PODJETJA.title, PODATKI.data_txt
FROM ((KATEGORIJE LEFT JOIN POVEZAVE ON KATEGORIJE.catid=POVEZAVE.catid)
LEFT JOIN PODJETJA ON POVEZAVE.itemid=PODJETJA.itemid)
LEFT JOIN PODATKI ON PODJETJA.itemid=PODATKI.itemid
;
Težavo imam z tabelo PODATKI . V tej tabeli so vsi podatki o podjetjih, ločujejo se po »fieldid«.
Želel bi da mi izmed vseh podatkov izpiše samo email naslov podjetja, vendar pogoj »where PODATKI.fieldid="7"« ni v redu ker podjetje, katero nima emaila, nima polja s tem ID-jem in ga posledično ne izpiše.
Rabil bi pogoj, ki bi mi izpisal email poleg naziva podjetja ali ustvaril prazno polje če polje z emailom ne obstaja.
Hvala za pomoč
LP, Ervin
salesky ::
Bi blo ful fajn, če bi lahko na hitro izrisal tabele kako so povezane in bi potem lažje karkoli napisal.
atlet ::
Želel bi da mi izmed vseh podatkov izpiše samo email naslov podjetja, vendar pogoj »where PODATKI.fieldid="7"« ni v redu ker podjetje, katero nima emaila, nima polja s tem ID-jem in ga posledično ne izpiše.
where PODATKI.fieldid="7" OR PODATKI.fieldid IS NULL
Nekaj v tem smislu. :p
Enostaven program za fakturiranje -> www.quibi.net
ervinbocko ::
Pozdravljeni
where PODATKI.fieldid="7" OR PODATKI.fieldid IS NULL -> ni uporabna, ker ne obstaja za vsak vnos polje z IDjem 7 in zato tudi podjetja ne izpiše
Primer poizvedbe, s katero dobim vsa podjetja v določeni kategoriji z emailom, vendar bi želel tudi tista, ki ga nimajo.
SELECT KATEGORIJE.name, POVEZAVE.catid, POVEZAVE.itemid, PODJETJA.title, PODATKI.data_txt
FROM KATEGORIJE, POVEZAVE, PODJETJA, PODATKI
WHERE KATEGORIJE.catid=POVEZAVE.catid
and KATEGORIJE.catid="31"
and POVEZAVE.itemid=PODJETJA.itemid
and PODJETJA.itemid=PODATKI.itemid
and PODATKI.fieldid="7";
Težava je, ker program ne ustvari polj za katere ni vnosa in podatke ne naniza vsakega v svoj stol ampak so vsi v enem stolpu, želim se pa izogniti vsakokratnemu preurejanju tabele PODATKI , če ne bo šlo drugače bom delal tako.
PRIMER (polj za katere ni vnosa ne ustvari):
fieldid data_txt
1 Stara Vrhnika 45
2 1360
3 Vrhnika
9 Nešad
15 041-621-581
7 akida.gradbenistvo@gmail.com
Rabil bi poizvedbo na varijanto da poleg imena podjetja izpiše polje z IDjem 7 če pa tega polja ni pa pusti prazno polje.
LP, Ervin
where PODATKI.fieldid="7" OR PODATKI.fieldid IS NULL -> ni uporabna, ker ne obstaja za vsak vnos polje z IDjem 7 in zato tudi podjetja ne izpiše
Primer poizvedbe, s katero dobim vsa podjetja v določeni kategoriji z emailom, vendar bi želel tudi tista, ki ga nimajo.
SELECT KATEGORIJE.name, POVEZAVE.catid, POVEZAVE.itemid, PODJETJA.title, PODATKI.data_txt
FROM KATEGORIJE, POVEZAVE, PODJETJA, PODATKI
WHERE KATEGORIJE.catid=POVEZAVE.catid
and KATEGORIJE.catid="31"
and POVEZAVE.itemid=PODJETJA.itemid
and PODJETJA.itemid=PODATKI.itemid
and PODATKI.fieldid="7";
Težava je, ker program ne ustvari polj za katere ni vnosa in podatke ne naniza vsakega v svoj stol ampak so vsi v enem stolpu, želim se pa izogniti vsakokratnemu preurejanju tabele PODATKI , če ne bo šlo drugače bom delal tako.
PRIMER (polj za katere ni vnosa ne ustvari):
fieldid data_txt
1 Stara Vrhnika 45
2 1360
3 Vrhnika
9 Nešad
15 041-621-581
7 akida.gradbenistvo@gmail.com
Rabil bi poizvedbo na varijanto da poleg imena podjetja izpiše polje z IDjem 7 če pa tega polja ni pa pusti prazno polje.
LP, Ervin
Zgodovina sprememb…
- spremenil: ervinbocko ()
destiny ::
<code>
SELECT KATEGORIJE.name, POVEZAVE.catid, POVEZAVE.itemid, PODJETJA.title, PODATKI.data_txt
FROM ((KATEGORIJE LEFT JOIN POVEZAVE ON KATEGORIJE.catid=POVEZAVE.catid)
LEFT JOIN PODJETJA ON POVEZAVE.itemid=PODJETJA.itemid)
LEFT JOIN PODATKI ON PODJETJA.itemid=PODATKI.itemid and PODATKI.fieldid="7"
</code>
A si to hotu?
SELECT KATEGORIJE.name, POVEZAVE.catid, POVEZAVE.itemid, PODJETJA.title, PODATKI.data_txt
FROM ((KATEGORIJE LEFT JOIN POVEZAVE ON KATEGORIJE.catid=POVEZAVE.catid)
LEFT JOIN PODJETJA ON POVEZAVE.itemid=PODJETJA.itemid)
LEFT JOIN PODATKI ON PODJETJA.itemid=PODATKI.itemid and PODATKI.fieldid="7"
</code>
A si to hotu?
ervinbocko ::
Pogoj "and PODATKI.fieldid="7" " ni v redu ker mi ne izpiše podjetij, ki nimajo polja s tem idjem.
Problem je ker baza ni narejena po pravil za sql, sej sem nekako rešu težavo s tem ko sem s pomočjo excella prefiltreral podatke in naredil nove tabele
LP
Problem je ker baza ni narejena po pravil za sql, sej sem nekako rešu težavo s tem ko sem s pomočjo excella prefiltreral podatke in naredil nove tabele
LP
destiny ::
Če daš "and PODATKI.fieldid="7" " v WHERE clause, potem ti iz left joina naredi inner join, zato ostali zapisi "zginejo". Če pa tist dodatni pogoj daš v LEFT JOIN, si s tem left joinal tudi ta dodatni pogoj in bi query moral vrnit tudi tiste vrstice, kjer se pogoj ne ujema z želenimi rezultati iz tabele PODATKI.
ervinbocko ::
Sem si tud js tako predstavljal poizvedbo samo mi ne dela, mogoče Access ne podpira tega.
Prej sem pozabil opisati da delam na domačem PCju z Accessom. Izvozil sem si sql baze, ki jih za nadaljno rabo obdelujem.
A je mogoče kakšen drug program ali opcija namesto accessa.
LP
Prej sem pozabil opisati da delam na domačem PCju z Accessom. Izvozil sem si sql baze, ki jih za nadaljno rabo obdelujem.
A je mogoče kakšen drug program ali opcija namesto accessa.
LP
destiny ::
Lahko si npr. inštaliraš zastonjski SqlExpress. Je precej bolj zmogljiv od vsakega accessa.
Reso ::
SELECT KATEGORIJE.name, POVEZAVE.catid, POVEZAVE.itemid, PODJETJA.title, max(PODATKI.data_txt)
FROM ((KATEGORIJE LEFT JOIN POVEZAVE ON KATEGORIJE.catid=POVEZAVE.catid)
LEFT JOIN PODJETJA ON POVEZAVE.itemid=PODJETJA.itemid)
LEFT JOIN PODATKI ON PODJETJA.itemid=PODATKI.itemid
group by KATEGORIJE.name, POVEZAVE.catid, POVEZAVE.itemid, PODJETJA.title
sedaj boš dobil joinan samo po en record iz tabele PODATKI na ostalo. Edini problem je ker je joinan na random. V Mysql se mi zdi da lahko max() zamenjas z first()
FROM ((KATEGORIJE LEFT JOIN POVEZAVE ON KATEGORIJE.catid=POVEZAVE.catid)
LEFT JOIN PODJETJA ON POVEZAVE.itemid=PODJETJA.itemid)
LEFT JOIN PODATKI ON PODJETJA.itemid=PODATKI.itemid
group by KATEGORIJE.name, POVEZAVE.catid, POVEZAVE.itemid, PODJETJA.title
sedaj boš dobil joinan samo po en record iz tabele PODATKI na ostalo. Edini problem je ker je joinan na random. V Mysql se mi zdi da lahko max() zamenjas z first()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | MySQL poizvedba iz dveh tabelOddelek: Programiranje | 1581 (874) | MrStein |
» | [SQL] teževa pri iskanju zapisovOddelek: Programiranje | 2123 (1713) | lopow |
» | MySQL izpis vsebine iz dveh tabelOddelek: Programiranje | 1209 (1097) | iMark |
» | sql težavaOddelek: Izdelava spletišč | 1344 (1094) | CaqKa |
» | PHP - pomočOddelek: Izdelava spletišč | 1877 (1521) | BlueRunner |