Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  SQL ühte veergu tulemus märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
nexus4
Kreisi kasutaja
nexus4

liitunud: 01.03.2012




sõnum 09.07.2014 15:50:07 SQL ühte veergu tulemus vasta tsitaadiga

Tere,

Selline küsimus, kas on võimalik ühte veergu tuua tulemus mitmest tabelist korraga?

Et kui tavaline päring toob näiteks ühest tabelist

11
22
33
44
null
null
null

Aga teises tabelis on ka nendele nullidele vasted olemas, siis võiks tulemus välja näha selline:
11
22
33
44
55
66
77

kus 11-44 on nt tabelist1 ja 55-77 tabelist2
Kommentaarid: 29 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
neros
HV Guru
neros

liitunud: 26.11.2003




sõnum 09.07.2014 15:54:18 vasta tsitaadiga

union oleks siinkohal ilmselt v6tmes6na, ilma p2ringute sisu teadmata.
_________________
GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.
Kommentaarid: 48 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum
jnt
HV Guru
jnt

liitunud: 10.05.2005



Autoriseeritud ID-kaardiga

sõnum 09.07.2014 15:55:29 vasta tsitaadiga

joini tabelid kokku ja selecti omale vajalikud field'id IFNULL() funktsiooni kaudu.
_________________
Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda. icon_wink.gif
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt
Kommentaarid: 110 loe/lisa Kasutajad arvavad:  :: 2 :: 0 :: 102
tagasi üles
vaata kasutaja infot saada privaatsõnum
nexus4
Kreisi kasutaja
nexus4

liitunud: 01.03.2012




sõnum 09.07.2014 16:36:02 vasta tsitaadiga

neros kirjutas:
union oleks siinkohal ilmselt v6tmes6na, ilma p2ringute sisu teadmata.

union liidab lihtsalt kokku veerud, mul on vaja asendada ühest tabelist tulnud null read teisest tabelist sobivate* väärtustega

jnt kirjutas:
joini tabelid kokku ja selecti omale vajalikud field'id IFNULL() funktsiooni kaudu.

uurin, tegu oracle'ga seal vist sellist pole, aga nvl()'iga on võimalik midagi teha

*
tabel1 2 veergu

a -- 11
b -- 22
c -- 33
d -- 44
e -- null
f -- null
g -- null

tabel2 2veergu

a -- null
b -- 22
c -- null
d -- null
e -- 55
f -- 66
g -- null

vajalik tulemus

a -- 11
b -- 22
c -- 33
d -- 44
e -- 55
f -- 66
g -- null
Kommentaarid: 29 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
2ndalpha
HV kasutaja
2ndalpha

liitunud: 03.11.2004




sõnum 09.07.2014 16:47:03 vasta tsitaadiga

SELECT NVL(t1.veerg, t2.veerg) FROM tabel1 t1
JOIN tabel2 t2 ON t2.mingiteineveerg = t1.mingiveerg
Kommentaarid: 23 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 22
tagasi üles
vaata kasutaja infot saada privaatsõnum
2korda2
HV kasutaja

liitunud: 19.07.2003




sõnum 09.07.2014 17:12:02 vasta tsitaadiga

Kui mõlemas tabelis on väärtus ja need on erinevad, kumb siis "õige" on? Oracle puhul ehk abiks ka CASE (kui asi ei piirdu vaid NULL-dega).
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
nexus4
Kreisi kasutaja
nexus4

liitunud: 01.03.2012




sõnum 09.07.2014 17:16:14 vasta tsitaadiga

Kui mõlemas tabelis väärtused on ja kui nad ei ole identsed siis nt võiks saada määrata et tabel1 väärtus jääb
kangesti aju jookseb sinna exceli IF suunas, aga ei oska sql'i kirjutada midagi sama kavalat, et kui table1 veer2 on null siis võta table2 veerust2
Kommentaarid: 29 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
2ndalpha
HV kasutaja
2ndalpha

liitunud: 03.11.2004




sõnum 09.07.2014 17:19:27 vasta tsitaadiga

Mu näites NVL(t1.veerg, t2.veerg) on pseudokoodina

if t1.veerg != null
return t1.veerg
else
return t2.veerg

Väärtuste identne olemine ei oma ju tähtsust. Vahet pole siis kumb võtta.
Kommentaarid: 23 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 22
tagasi üles
vaata kasutaja infot saada privaatsõnum
2korda2
HV kasutaja

liitunud: 19.07.2003




sõnum 10.07.2014 13:03:21 vasta tsitaadiga

2ndalpha kirjutas:
Väärtuste identne olemine ei oma ju tähtsust. Vahet pole siis kumb võtta.
Küsimus oligi selles, kui väärtused EI ole identsed.
nexus4 kirjutas:
...kangesti aju jookseb sinna exceli IF suunas, aga ei oska sql'i kirjutada...
Nagu viitasin - CASE.
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
2ndalpha
HV kasutaja
2ndalpha

liitunud: 03.11.2004




sõnum 10.07.2014 13:10:16 vasta tsitaadiga

Kui nad ei ole identsed, siis tähendab et vähemalt üks neist ei ole null. Ja NVL-i abil see lähebki käiku.
Mis maagia Sa casega siis kirjutada tahaksid? icon_smile.gif
Kommentaarid: 23 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 22
tagasi üles
vaata kasutaja infot saada privaatsõnum
2korda2
HV kasutaja

liitunud: 19.07.2003




sõnum 10.07.2014 13:18:05 vasta tsitaadiga

2ndalpha,
minu jaoks ei ole päris selge, mida pärida üritatakse.
Kui tulemuses peavad olema üksnes kahe tabeli peale kokku kindla veeru unikaalsed väärtused, siis tuleks lisada distinct või group by. Kui tulemuses tahetakse näha kõiki olemasolevaid väärtusi mingi kindla lisatunnuse kaupa stiilis:
Rida1 väärtus=11 (tabelist 1)
Rida2 väärtus=22 (tabelist 1)
Rida3 väärtus=33 (tabelist 2)
...

siis sellisel juhul on oluline teada, mida teha kui:
Rida4 väärtus=44 (tabelis 1) või 45 (tabelis 2)

Ei ole väärtused identsed? Ei ole. Kas võib lihtsalt võtta esimese tabeli väärtuse? Ülesande püstitus sel kohal ei ütle midagi, mistõttu ongi vaja täpsustada.
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
2ndalpha
HV kasutaja
2ndalpha

liitunud: 03.11.2004




sõnum 10.07.2014 13:27:23 vasta tsitaadiga

nexus4 kirjutas:
Kui mõlemas tabelis väärtused on ja kui nad ei ole identsed siis nt võiks saada määrata et tabel1 väärtus jääb
Kommentaarid: 23 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 22
tagasi üles
vaata kasutaja infot saada privaatsõnum
2korda2
HV kasutaja

liitunud: 19.07.2003




sõnum 10.07.2014 13:33:03 vasta tsitaadiga

Kui nii, siis nii. Sellisel juhul piisab ka nvl-st. CASE võimaldab peenemat loogikat (sisuliselt exceli IF analoog).
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
nexus4
Kreisi kasutaja
nexus4

liitunud: 01.03.2012




sõnum 10.07.2014 15:13:41 vasta tsitaadiga

2ndalpha, pakutud variant peaks sobima, ainult et mul jääb päring lõputult jooksma...
nüüd läheb keeruliseks, sest mul on nii, et selles tabelis2 on ühe sisse kande näiteks a kohta mitu väärtust nt 11,22,33jne ja sissekandeid kokku on mitu miljonit ja ta tahab kõiki väärtuseid tuua, mis sellele ühele a'le vastab.
mul küll on tingimus sees mis peaks teoreetiliselt võtma ainult 1 a'le vastava väärtuse, aga ilmselt see ei tööta miskipärast :/

SELECT
A.veerg1
nvl(A.veerg2, b.veerg2),
TO_CHAR(MIN(b.algus), 'dd.mm.yyyy hh24:mm:ss'),
TO_CHAR(MAX(b.l6pp), 'dd.mm.yyyy hh24:mm:ss'),
FROM tabel1 A
left join tabel2 b ON A.veerg1=B.veerg1

GROUP BY A.ID, NVL(A.veerg2, B.veer2)
ORDER BY ID ASC

Selles tabel2 on siis 4veergu, esimene veerg sisaldab endas a,b,c jne, teine veerg 11,22,33, kolmas veerg aeg
ühe a sissekande kohta on mitu 11,22,33 ja algus aeg ja lõpu aeg

Kui mul on min ja max funktsioonid sees, siis kas ta teoorias peaks ikkagi suutma ainult ühe teise veeru väärtuse tagastama?
Kommentaarid: 29 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
2korda2
HV kasutaja

liitunud: 19.07.2003




sõnum 10.07.2014 15:39:56 vasta tsitaadiga

Grupeerimise tingimused peaksid vastama päringus kasutatavatele veergudele (A.veerg1 vs A.ID). Antud juhul peaks olema:
...
GROUP BY A.veerg1

Kasutada koos group by ja order by on jõudluse seisukohast raske juhus.
Oled ikka kindel, et tabelite join peaks olema üle veerg2 väärtuste?
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
nexus4
Kreisi kasutaja
nexus4

liitunud: 01.03.2012




sõnum 15.07.2014 16:12:52 vasta tsitaadiga

2ndalpha, sinu pakutud nvl() tuli kenasti ülesandega toime, täname.
Kommentaarid: 29 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  SQL ühte veergu tulemus
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.