» »

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

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

Zgodovina sprememb…

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?

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

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

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()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

MySQL poizvedba iz dveh tabel

Oddelek: Programiranje
101474 (767) MrStein
»

[SQL] teževa pri iskanju zapisov

Oddelek: Programiranje
101985 (1575) lopow
»

MySQL izpis vsebine iz dveh tabel

Oddelek: Programiranje
91082 (970) iMark
»

sql težava

Oddelek: Izdelava spletišč
51274 (1024) CaqKa
»

PHP - pomoč

Oddelek: Izdelava spletišč
131786 (1430) BlueRunner

Več podobnih tem