Új hozzászólás Aktív témák
-
nyunyu
félisten
válasz Fundiego #3550 üzenetére
Önmagával left outer joinnal kiszűrni a "duplikációkat"?
Valami ilyesmi Oracleben:
select t1.*
from tabla t1, tabla t2
where t1.c=t2.b (+)
and t2.b is null;Vagy szabványos szintaxissal:
select t1.*
from tabla t1
left join tabla t2
on t1.c=t2.b
where t2.b is null;[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
kem
addikt
Sziasztok!
A kerdesem az lenne, hogy hogyan tudnek megvaltoztatni egy mezo tipusat de az erteket nem? Nekem ugy tunik, hogy a tipus is az ertek "string" resze pl: <s>2</s> vagy <int>2</int>. Nagyon sok ertek rosszul van definialva, ami miatt a logokat telef*ssa az applikacio, de mukodik. Jelenleg ertekenkent mgyek rajta vegig, de igy nagyon lassan tudok majd vegezni, kb 400 change kellene hozza (8platform, 500k+ user, 50+ attributum).
A filter amit most hasznalok:
update subscription_attribute sa
set sa.VALUE = '<int>2</int>'
...
and sa.value LIKE '<s>2</s>'Ez egyebkent TimesTen DB, es a DBAnk nyugdijba ment
Koszi a segitseget elore is.
[ Szerkesztve ]
Köszi!
-
kem
addikt
Pl az egyik platformnak, ez az egyik attributuma, amit roszul provisioningeltek sokaig:
< <int>3</int>, 150328 >
< <int>5</int>, 2093 >
< <s>3</s>, 288405 >
< <s>5</s>, 6370 >Az osszes stringet itt at kellene nevezni integerre. A bal oldali az ertek, a jobb oldali az a number of subscribtioins amihez az az ertek van rendelve. Valahogy egyszerre szeretnem az osszes 5-os, es 3-ast is feldolgozni. Van ahol ebbol tobb mint 10 ertek van, nem csak ez a ketto.
Szoval a kerdesem valoszinuleg alap SQL whitecard tema amivel nem vagyok tisztaba. Mukodne az ugy pl, hogy <s>*</s> van a filterben, es <int>*</int> az update oldalon? Gondolom nem ilyen egyszeru a tema.
Köszi!
-
tm5
tag
Hát a WHERE feltételben az van, hogy minden olyan rekordra fusson le aminél a mező értéke '<s>'-sel kezdődik és '</s>' -re végződik.
A SET-nél az van, hogy vágja ki a két fenti markup közti részt és rakja '<int>' és '</int>' közé.
Tehát így transzformál (elvileg):
'<s>1</s>' -> '<int>1</int>'
'<s>12</s>' -> '<int>12</int>'
'<s>999</s>' -> '<int>999</int>'
stb.Ha esetleg más szerkezetű (is) a mező tartalma, amit konvertálni kell, akkor írj már rá, légy szíves, néhány példát és akkor átfogalmazzuk a parancsot.
-
kem
addikt
Leteszteltem az elobb, es kis modositassal mukodik. 1-nel tobb szamjeggyel is, ami nekem fontos. Itt egy masik pelda, amiben nem sok elteres van, szoval elvileg erre at tudom irni.
< <boolean>false</boolean>, 152312 >
< <boolean>true</boolean>, 176 >
< <s>false</s>, 271636 >
< <s>true</s>, 1338 >Itt ugye csak annyi valtozik, hogy az int-bol boolean lesz, tehat:
update subscription_attribute sa
set sa.VALUE = '<boolean>'||SUBSTR(sa.VALUE,4,LENGTH(sa.VALUE)-7)||'</boolean>'
...
where sa.VALUE LIKE '<s>%</s>'Viszont ha megforditjuk a helyzetet, es boolean-bol kell mast csinalni, akkor mar a szamokat is at kell irni a SUBSTR utan. Ezt a reszt nem tudtam ertelmezni, csak kapisgalom:
SUBSTR(column_value,4,LENGTH(sa.VALUE)-7)
A column_value helyett sa.VALUE-val mukodik, a 4-es gondolom az elso karakter amit megovunk, de azt ami utana van nem ertem.Köszi!
-
tm5
tag
Érdekes, úgy rémlett, hogy később kijavítottam column_value-t SA.value-ra.
SUBSTR(sa.VALUE,4,LENGTH(sa.VALUE)-7)
: ide a 4 helyére azt kell írni, ahol kezdődik a tényleges érték. '<s>' ugye 3 karakter hosszú, tehát a negyedik karakternél fog kezdődni a tényleges mezőérték. A LENGTH(sa.VALUE)-7 megadja, hogy hány karakter hosszú a tényleges mezőérték. Ezt úgy kapjuk meg, hogy a mező teljes hosszából (LENGTH(sa.VALUE)) levonjuk a fölösleges rész hosszát. Ez a mi példánkban 7 volt, mert '<s>' és '</s>' összesen 7 karakter.Tehát ha a boolean-ből szeretnéd kibányászni a tényleges mezőértéket, akkor az így néz ki:
'<boolean>' hossza 9 (tehát a 10. karakteren fog kezdődni ami neked kell)
'</boolean>' hossza 10SUBSTR(sa.VALUE,10,LENGTH(sa.VALUE)-19)
[ Szerkesztve ]
-
kem
addikt
-
anulu
félisten
SQL Server 2012 SP3-mal kapcsolatban lenne kérdésem. megoldható-e, és hogyan, hogy ha van egy security group, akkor annak az összes tagjától elvenni annak a lehetőségét, hogy bármelyik csoporton SQL permissiont (jogosultság hozzáadás/elvétel) tudjon módosítani, illetve új security logint tudjon beállítani? akár úgy is, hogy egyébként a serveren local adminok. és hogy ezt a megszorítást még véletlenül se tudják módosítani?
"Jelenleg a cloud nem más mint a sales által elhazudott és eladott utópia, egy ígéret, csalánba csomagolt mézesmadzag, amit az üzemeltetés f@$zával vernek" | Feel the power! Intel Core i7 | iPhone 14Pro 256GB | iPad Pro 2017 64GB
-
Fundiego
tag
Hali
Van egy táblám ami sporteredményeket tartalmaz(versenyekre lebontva). Sorba akarom rendezni az összpontszám alapján ami megy is ORDER BY SUM(pont), azonban ha ugyanannyi pontjuk van az illetőknek akkor legjobb helyezés szerint tegye sorba ez is megvan még MIN(helyezes), de mi van akkor ha itt is ugyanannyi pontja van két versenyzőnek és a legjobb eredményük is ugyanaz? hogy lehet azt beleiktatni, hogy a 2. legjobb eredmény szerint is rendezzen sorba?
SELECT jatekos,COALESCE(SUM(Pont),0)
FROM `fordulo`
group by jatekos
order by sum(pont) desc,min(helyezes) -
Apollo17hu
őstag
válasz Fundiego #3567 üzenetére
Szélsőséges esetben előfordulhat olyan holtverseny is, ahol két versenyző az összes sportágat tekintve azonos helyezésekkel rendelkezik. Ekkor csak pénzfeldobás (--> random szám generálás) dönthet. Vagy létrehozol egy külön táblát, amiben a fair-play értékeket vezeted.
Visszatérve a problémádhoz talán megoldás lehetne, ha játékosonként a játékosok helyezéseit sorbarendezve, összefűzve letárolnád, és ennek a minimumát vennéd a helyezések minimuma helyett. Pl.:
egyik játékos helyezései:
1, 2, 2, 4, 5, 5, 5
-->1224555
másik játékos helyezései:
1, 2, 3, 3, 3, 3, 3
-->1233333
Oracle-ben ehhez a listagg() függvényt tudod használni. Valahogy így:
listagg(helyezes) WITHIN GROUP (ORDER BY helyezes) OVER (PARTITION BY jatekos)
[ Szerkesztve ]
-
Fundiego
tag
válasz Apollo17hu #3568 üzenetére
Köszönöm. De sajnos nem működik vmiért pedig utánanéztem példákon át. lehet mert webserveren futtatom a lekérdezést? within group-al van szerintem probléma amit nem tud értelmezni
-
Petya25
addikt
Valami banális tipp arra, hogy egy felhasználói táblát hogy tudok MS SQL tárolt eljárásban megszólítani? Van egy változó bemenő paraméterem a névhez, de hogy illesszem a tábla elé hogy megtaláljam?
Kb ennyi lenne a cél:
alter PROCEDURE sp
@user nvarchar(30)
AS
BEGINdrop table @user.tabla
END
GO[ Szerkesztve ]
Antonio Coimbra de la Coronilla y Azevedo, bizony!
-
SUPREME7
őstag
Sziasztok, picit megrekedtem az SQL tudásommal Volna 2 tábla, egyikben termékek vannak, vonalkód és áruház és az ára. A másik egy LOG, ha változik egy vonalkód ára az adott áruházban akkor mentődik.
Az lenne a lekérdezés lényege, hogy listázzam az összes terméket az első táblából, és ha van hozzá tartozó log, akkor azt is, de abból is csak a legutolsót az adott áruház-vonalkód alapján.
Itt lenne a minta amit tovább kellene vinnem:
https://www.db-fiddle.com/f/unix3VPHaQTSD3GCjf58zA/3
És az lenne a cél, hogy ezt kapjam vissza, ugyebár minden áruház csak egyszer szerepeljen és csak a legutolsó log adatai legyenek mellette, amihez pedig nincs log, ott NULL-t adjon vissza:
vonalkod | aruhaz | ar | valtozas_datum | regiar
59900444 | Budapest | 33000 | 2017-10-03 12:00 | 87000
59900444 | Szeged | 44000 | 2017-10-05 10:00 | 660000
59900444 | Pécs | 55000 | NULL | NULLA gondom az, hogy ha leszűröm azzal, hogy
GROUP BY termek.aruhaz
akkor ugyan visszakapom nagyjából azt amit szeretnék, de a Budapesti áruházból nem a legutolsó logot.SELECT termek.vonalkod,termek.aruhaz,termek.ar, arvaltozas_log.valtozas_datum,arvaltozas_log.regiar
FROM termek LEFT JOIN arvaltozas_log
ON termek.vonalkod=arvaltozas_log.vonalkod
AND termek.aruhaz=arvaltozas_log.aruhaz GROUP BY termek.aruhaz;Tovább szűröm így
MAX(arvaltozas_log.valtozas_datum)
akkor már a legutolsó dátumot kapom vissza, de nem az ahhoz tartozó "régi árat" teszi hozzá ....SELECT termek.vonalkod,termek.aruhaz,termek.ar, MAX(arvaltozas_log.valtozas_datum),arvaltozas_log.regiar
FROM termek LEFT JOIN arvaltozas_log
ON termek.vonalkod=arvaltozas_log.vonalkod
AND termek.aruhaz=arvaltozas_log.aruhaz GROUP BY termek.aruhaz;Köszönöm ha valaki tudna segíteni.
[ Szerkesztve ]
-
martonx
veterán
válasz SUPREME7 #3574 üzenetére
select t.vonalkod, t.aruhaz, t.ar, log.valtozas_datum, log.regiar
from termek t
left join (
select al.*
from arvaltozas_log al
join (
select aruhaz, Max(valtozas_datum) latest_valtozas
from arvaltozas_log
group by aruhaz) latest on al.valtozas_datum = latest.latest_valtozas and al.aruhaz = latest.aruhaz
) log on t.vonalkod = log.vonalkod
and t.aruhaz = log.aruhazPár megjegyzés:
1. végre valaki, aki vette a fáradtságot normális példa készítésére
2. a logodban ez a változás dátumra maxolás elég szerencsétlen, kellene bele egy autoincrement int ID
3. nevezéktana borzalmas az adatbázisodnak[ Szerkesztve ]
Én kérek elnézést!
-
mr.nagy
tag
Sziasztok!
Nem rég kellett elkezdenem SQL-el foglalkozni, igy ha nagyon bagatel a kérdés ne nevessetek ki!
A szerver MSSQL2008. Adva van egy tábla és egy tárolt eljárás. A feladat az lenne, hogy a tábla soraiban található mezők adatait használva paraméter ként, soronként futtassuk le a tárolt eljárást. Ez egyébként egy másik táblát tölt fel adatokkal.
Tudnátok egy egyszerű példát mutatni erre?!
Előre is köszönöm!
[ Szerkesztve ]
HMNote10Pro
-
Ispy
veterán
válasz mr.nagy #3579 üzenetére
Kell írni egy ciklust (CURSOR), ami összeállítja az INSERT utasítást egy változóba, amit az sp_executesql tárolt eljárással tudsz végrehajtani.
A változó, amibe az insertet rakod legyen NVARCHAR(MAX), a futtatás meg vagy EXEC sp_executesql(@VÁLTOZÓ) vagy csak simán EXEC (@VÁLTOZÓ).
Kábé a vázlata:
DECLARE @C_ID INT
DECLARE @CODE NVARCHAR(MAX)
DECLARE cursor_neve CURSOR LOCAL STATIC FOR SELECT ID FROM TÁBLA
OPEN cursor_neve
FETCH NEXT FROM cursor_neve INTO @C_ID
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @CODE=ide jön a kód, ami visszadja az insert utasítást stringbe, vagy a tárol eljárás hívás paraméterekkel
FROM tábla
WHERE ID=@C_ID
EXEC (@CODE)
FETCH NEXT FROM cursor_neve INTO @C_ID
END
CLOSE cursor_neve
DEALLOCATE cursor_neveVagy, ha kell visszajövő érték is az SP-től, akkor sp_executesql-t lehet paraméterezni szépen, feljebb a link.
[ Szerkesztve ]
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
#68216320
törölt tag
Tudja valaki, hogy a Mysql myisam eseteben lockolva van-e egy row amig update-elek vagy konkurens kornyezetben ebbol lehet baj?
-
martonx
veterán
válasz fordfairlane #3584 üzenetére
Hogy nincs row level lock, attól még gázabb lesz a konkurens írás Csak épp emberünk nem tudott jól kérdezni.
Én kérek elnézést!
-
bandi0000
nagyúr
sziasztok
kérnék egy kis segítséget, amatőr kis problémára
1, hogy lehet meglévő táblába létrehozni egy új mezőt SQL parancsokkal?
2, adott 2 tábla, egyikbe nevek vannak, illetve a nevek egyedi azonosítójuk, másikba pedig adatok vannak hozzájuk kapcsolva, persze 1 id-hez mehet több adat is, és olyan parancs kéne, ami azokat adja vissza, akikhez nem tartozik 1 adat sem... az sikerült hogy csoportosítva kiírta, akikhez tartozik adat, de azokat nem jelenítette meg, akikhez 1 se tartozottXbox One: bandymnc
-
nagyúr
válasz bandi0000 #3586 üzenetére
1,
alter table táblanév
add column adattípus
2,select tábla1.* from tábla1, tábla2, where tábla1.id not in (select id from tábla2)
[ Szerkesztve ]
Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.
-
nagyúr
adott egy mysql tábla,
show create table
szerintdefault charset=utf8
-cal létrehozva. van benne egy varchar (n) mező. a kérdés, hogy a teljes utf8 karakterkészletből melyik karaktereket tudom benne tárolni, és melyeket nem?konkrétan arra számítottam, hogy az
aäábcdeéfghiíjklmnoóöőpqrstuúüűvwxyzAÄÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ0123456789
sztringet le tudom benne tárolni, de csak ez jött vissza:aäábcdeéfghiíjklmnoóö?pqrstuúü?vwxyzAÄÁBCDEÉFGHIÍJKLMNOÓÖ?PQRSTUÚÜ?VWXYZ0123456789
.Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.
-
-
nagyúr
válasz bambano #3590 üzenetére
sql developer van ezen a vm-en, itt azt mondja tools/preferences/enviromentben, hogy encoding utf8.
database/nls mindenhol hungarian.
Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.
-
nagyúr
ha van tippetek melyikben, szívesen fogadom. valószínűleg nálam lesz valami, mert egy másik kliensről nincs ilyen probléma. sajnos ezen a vm-en nincs más kliens, ezzel kell valahogy megoldanom
@fordfairlane: igen. egy update ment ki a worksheetről.
[ Szerkesztve ]
Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.
-
-
nagyúr
válasz bambano #3595 üzenetére
mármint az oracle sql developerben? nem, nincs. legalábbis én nem találtam. encodingnál van utf8, meg utf-8, de nem láttam különbséget közöttük használat során.
[ Szerkesztve ]
Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.
-
nyunyu
félisten
válasz velizare #3596 üzenetére
Nincs erre valami parancs, amit minden lefuttatott script elejére be tudsz szúrni, hogy UTF8 kódolást használjon?
Mi Oracle DBAink is szoktak szívni azzal, hogy mentenek egy scriptet PL/SQL Developerből, aztán a prod környezet üzemeltetéséért felelős "kolléga" SQL Developerből futtatva mindig telibevágta vele az éles adatokat.
Azóta minden neki küldött script úgy kezdődik, hogy
ALTER SESSION SET NLS_LANGUAGE=...Aztán jönnek csak az ékezetes stringeket tartalmazó INSERTek.
[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
nagyúr
úgy néz ki, valami elkúrt módon lett létrehozva ez a db ebből a szempontból, ezért viselkedik máshogy kb. minden klienssel.
Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.
-
nagyúr
noh, a db-t újrarángattuk a megfelelő beállításokkal, de a megoldás egy olyan kliens használata lett, amelyik képes megmondani a jdbc drivernek a kapcsolódáshoz használt karakterszetet. pl. dbeaver.
köszi mindenkinek a segítséget!
Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.
-
Fundiego
tag
Van egy táblám, és szeretném kilistázni pilótánként az összpontszámot, a legkisebb végeredményt, a második legkisebb végeredményt, a harmadik legkisebb végeredményt és a negyedik legkisebb végeredményt egy lekérdezésben. tehát ha valakinél a végeredményben 1,1,1,1 van akkor ezt írja ki ne pedig az 1,2,3,4-et.
megoldható ez?ID ev vegeredmeny pilóta pont
1 2017 1 Valtteri Bottas 25
2 2017 2 Sebastian Vettel 18
3 2017 4 Lewis Hamilton 12
4 2017 5 Kimi Raikkonen 10
5 2017 1 Lewis Hamilton 25
6 2017 2 Valtteri Bottas 18
7 2017 3 Kimi Raikkonen 15
8 2017 7 Sebastian Vettel 6
9 2017 1 Sebastian Vettel 25
10 2017 2 Kimi Raikkonen 18
11 2017 3 Valtteri Bottas 15
12 2017 4 Lewis Hamilton 12
13 2017 1 Lewis Hamilton 25
14 2017 2 Sebastian Vettel 18
15 2017 4 Kimi Raikkonen 12
16 2017 5 Valtteri Bottas 10
17 2017 1 Lewis Hamilton 25
18 2017 2 Valtteri Bottas 18
19 2017 3 Sebastian Vettel 15
20 2017 5 Kimi Raikkonen 10
21 2017 1 Lewis Hamilton 25
22 2017 3 Valtteri Bottas 15idáig jutottam
SELECT pilota, SUM( pont ) , MIN( vegeredmeny )
FROM `futam`
WHERE ev = '2017'
GROUP BY pilota
ORDER BY SUM( pont ) DESC