- Fórumok
- Szoftverfejlesztés
- SQL kérdések
- (kiemelt téma)
-
3400 - 3301
6041 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
DS39
nagyúr
túlbonyolítod, de itt:
@ID=(SELECT OBJECTID FROM INSERTED)
minek a kurzor, ha itt benne hagyod azt a belső selected ami több sort fog visszahozni.
miért nem csinálod úgy ahogy írtam az elején?

ALTER TRIGGER nepesseg_szum ON OVEZETEK
INSTEAD OF INSERT
AS
BEGIN--és a triggeren belül insertálod
INSERT INTO OVEZETEK (oszlopnevek....)
SELECT oszlop1, oszlop2,
(SELECT SUM (TELEPULES.LAKOSOK) FROM TELEPULES
WHERE TELEPULES.SHAPE.STWithin(I.SHAPE)=1),
oszlop4, oszlop5 ....
FROM INSERTED IEND
--(kb ennyi, csak egészítsd ki a tényleges oszlopnevekkel a selectben, és az insert into sorban)ne after insert után update-elj, hanem eleve ne engedd addig az insertet a táblába míg át nem alakítod úgy az eredményt, ahogy neked megfelelő.
így szerintem nem kapnál eleve ilyen hibaüzenetet, hiszen az inserted táblában soronként egy SHAPE érték lesz, ezért a SUM is csak egy értéket ad vissza.
-
kw3v865
senior tag
Egyelőre így néz ki jelenleg a triggerem a kurzorral, de a probléma továbbra is ugyanaz.
ALTER TRIGGER nepesseg_szum ON OVEZETEK
AFTER INSERT
AS
BEGINDECLARE @TERULET GEOMETRY
DECLARE @ID INTDECLARE @kurzor CURSOR
SET @kurzor = cursor FOR
SELECT SHAPE, OBJECTID FROM INSERTEDOPEN @kurzor
FETCH NEXT FROM @kurzor INTO @TERULET, @IDWHILE @@FETCH_STATUS = 0
BEGIN
UPDATE OVEZETEK SET Nepesseg_ossz = (SELECT SUM(n.lakosok) from NEPESSEG_EOV N
WHERE N.SHAPE.STWithin(@TERULET)=1) WHERE @ID=(SELECT OBJECTID FROM INSERTED);FETCH NEXT FROM @kurzor INTO @TERULET, @ID
ENDCLOSE @kurzor
DEALLOCATE @kurzor
END;Vajon hol ronthattam el?

-
DS39
nagyúr
-
kw3v865
senior tag
Köszönöm, így már elég jól működik, de még nem tökéletes: már csak arra kell megoldást találni, hogy ha egynél több sort szúrok be az övezetek táblába, akkor is működjön.
Tehát ha pl. 2 új sor van, akkor ezt írja ki: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Jól gondolom, hogy ehhez kurzort kellene használni?
-
DS39
nagyúr
vagy ha nincs egy konkrét érték amit vizsgálj, akkor az INSERTED selectjében ki cserélhetetd azt az oszlopértéket a belső selected sum-jára.
SELECT oszlop1, oszlop2,
(SELECT SUM (TELEPULES.LAKOSOK) FROM TELEPULES
WHERE TELEPULES.SHAPE.STWithin(I.SHAPE)=1),
oszlop4, oszlop5 ....
FROM INSERTED I(@terulet helyett bekerülendő shape oszlop értékét betéve, már nem kell tudd az objectid-t)
-
DS39
nagyúr
Szia!
Ezt úgy lehet megoldani, hogy megnézed mi lenne insertálva:
INSTEAD OF INSERT
AS
BEGININSERT INTO TABLANEV (oszlopnevek....)
SELECT oszlopnevek...
FROM INSERTED IEND
--------
itt a SELECT-en belül használhatsz CASE WHEN-eket, hogy adott oszlop értéke ha ez, akkor legyen helyette amaz. remélem érted
-
kw3v865
senior tag
Sziasztok!
Egy Triggeres kérdésem lenne hozzátok: MS SQL 2012-ben írok egy triggert, amely INSERT-t hatására fut le, és az új rekord egyik mezőjét frissíti. Hogyan kell hivatkozni az újonnan beszúrt rekordra?
Tehát csak és kizárólag az új sor egy celláját kell update-elnie.Most csak úgy működik, ha megadom az új rekord objectid-ját.
Jelenleg így néz ki:
CREATE TRIGGER nepesseg_szum ON OVEZETEK
AFTER INSERT
AS
BEGINDECLARE @TERULET GEOMETRY;
SET @TERULET=(SELECT SHAPE FROM OVEZETEK WHERE OBJECTID=26);
UPDATE OVEZETEK SET Nepesseg_ossz = (SELECT SUM (TELEPULES.LAKOSOK) FROM TELEPULES
WHERE TELEPULES.SHAPE.STWithin(@TERULET)=1) WHERE OVEZETEK.OBJECTID=26;
RETURN
END;Azt akarom, hogy ne kelljen megadni az objectid-t, hanem mindig a beszúrt sorra fut le. Hogyan lehetne ezt megoldani?
-
ZTE_luky
senior tag
-
DS39
nagyúr
-
ZTE_luky
senior tag
-
updog
őstag
Megoldás (#3387) Ispy nyomán (azért még nem 100%-os, mert mondjuk évente 2-3x kérik hogy valamelyik napi adatokat küldjük már újra, na akkor majd ez nem lesz jó
).SELECT * FROM MEGRENDEL
WHERE (STATUSZ <> 0
OR STATUS = 0 AND ADAT_ERKEZETT = SELECT MAX(ADAT_ERKEZETT) FROM MEGRENDEL)
AND ... --itt még van 1-2 business feltétel -
bambano
titán
-
updog
őstag
Kicsit hülyén fogalmaztam meg, illetve egy dolgot kihagytam: nem működhet a dátumos dolog, mert az ADAT_ERKEZETT értéke mindig a business nap szerinti dátum, ezt program adja hozzá.
Tehát: ma este (is) akár éjfél előtt, akár éjfél után kaphatjuk a fájlt, 20170509-es értéket fogunk oda beírni. Sajnos ez is benne van a pakliban.
Szóval gyanús hogy legalább egy segédtábla lesz a vége, rendelési szám + elküldve mezőkkel, aztán belefonom a viewba... csak ugye ezt se szerettem volna.
-
Ispy
nagyúr
-
updog
őstag
Sziasztok,
Félig SQL, félig logikai dilemmám lenne: minden hétköznap(!) este érkezik hozzánk a megrendeléseket tartalmazó adatfile, amit rámergelünk az előző adatokra.
Betöltés után kell generálnunk egy kimeneti fájlt. A trükk az, hogy amíg a megrendelés státusza nem végleges (legyen mondjuk 0), addig minden nap újra meg újra ki kell tennünk a fájlba, akkor is ha aznap nem módosult, de ha aznap váltott 0-ra, akkor aznap kell még exportálni, de utána többször nem.
Egy view-ból generáljuk az adatokat, és ha csak mód van rá, szeretném úgy megoldani, hogy a táblába ne kelljen hozzáadni az "elküldve" vagy hasonló oszlopot, csak a view módosításával viszont nem látom, hogy ezt a "utoljára még elküldöm de többször nem" feltételt hogy írjam meg, ha az utolsó státuszváltás után nem változik a rekord (tehát a feltételnek igaznak kell lennie aznap amikor érkezett, de utána már nem).
Példa:
MEGR MEGR_DATUM MOD_DATUM STATUSZ ADAT_ERKEZETT
---- ---------- --------- ------- -------------
1234 20170502 null 1 20170502Új megrendelés 2017.05.02-n, betöltés után kimentjük fájlba.
03-án nem módosul a rekord, de exportáljuk.
MEGR MEGR_DATUM MOD_DATUM STATUSZ ADAT_ERKEZETT
---- ---------- --------- ------- -------------
1234 20170502 170504 2 20170504Státusz módosult, nem végleges státusz, exportáljuk.
05-én nem módosul, de exportáljuk
MEGR MEGR_DATUM MOD_DATUM STATUSZ ADAT_ERKEZETT
---- ---------- --------- ------- -------------
1234 20170502 170506 0 20170508Státusz módosult (6-án!), amikor megérkezett a módosítás (május 8!) még kigeneráljuk, de 9-én és utána már nem.
(M)Nyilván eddig megvan:
SELECT * FROM MEGRENDEL WHERE STATUSZ <> 0
AND ... --itt még van 1-2 business feltétel
;Ami a triviális megoldás hogy felveszek egy ELKULDVE oszlopot, és küldés után updatelem 1-re, és hozzáadom a feltételt:
AND NVL(ELKULDVE,0)=0De mivel a tábla tisztán business adatokat tartalmaz, nem nagyon tetszene senkinek, ha én ilyen technikai jellegű oszlopot felvennék. Sajnos sysdate-re alapuló feltétel se játszik mert a beérkező fájl jöhet éjfél előtt, után, vagy akár aznap ki is maradhat, akkor másnap kétnapi adat megy be.
-
SUPREME7
őstag
-
bpx
őstag
-
SUPREME7
őstag
Sziasztok, hogyan lehetne megoldani egy ilyen lekérdezést?
Pl van egy ilyen tábla:
Vonalkód | Áruház | Ár
111 | Buda | 400Ft
111 | Pest | 400Ft
222 | Buda | 600Ft
222 | Pest | 650FtAz lenne a cél. hogy csak azokat a termékeket listázza amiknél van áreltérés egyes áruházak között. Tehát az első esetben mindkét áruházban ugyanaz a termék ugyanazon az áron van, de a másik már eltérő árral van. Én csak ezeket szeretném listázni.

-
Chesterfield
őstag
-
Ispy
nagyúr
Mi ezzel a cél? Mert ok, átmásoltad, de az eredeti sor nem változhat meg utána?
Egyébként egy INSERT triggert kell írni, ez akkor fog lefutni, amikor bekerül a rekord a táblába. Az inserted nevű táblában lesznek a rekordok, onnan kell egy INSERT utasítással beírnod a másik táblába.
Kb. így néz ki:
CREATE TRIGGER dbo.teszt
ON dbo.azeredetitábládneve
FOR INSERT
AS
INSERT INTO amásiktábládneve (mezőkfelsorolva)
SELECT mezőkfelsorolva
FROM inserted -
Froclee
őstag
szerintem ez eléggé bad practise. nem tudod ezt mashogy megoldani?
egyebkent ha beirod googlebe hogy 'trigger on insert mssql' akkor elso talalat.
-
Chesterfield
őstag
Sziasztok!
MS SQL-ben szereték egy triggert készíteni, ami abban az esetben, ha egy adott táblába bekerül egy új sor, azt átmásolja egy másik táblába.tudtok segíteni?
köszönöm
-
kem
addikt
Sziasztok!
Adott egy Oracle TimesTen memoriaban futo DB amirol szeretnek ERD-t kesziteni, mert egyszeruen nem latom at igy nyersen. Tudtok erre valami megoldast?
Koszi elore is!
kem
-
DrojDtroll
veterán
-
sztanozs
veterán
A macskaköröm a második SQL végén.
-
DrojDtroll
veterán
-
DS39
nagyúr
-
velizare
nagyúr
-
sztanozs
veterán
A második ezért találja meg: http://stackoverflow.com/a/16791526
Gyakorlatilag Integer-t cast-ol a stringből, és a
cast("1B" as int) = 1igaz lesz.Mysql-ben az underscore az 1-karakter helyettesítő elem: [link]
-
DS39
nagyúr
csodálom hogy egyik is jó.
like-nál szerintem %-ot kellen használni, a másiknál meg lemaradt egy ilyen " -
DrojDtroll
veterán
A következő két lekérdezés azonos eredményt add.
SELECT tanulok.nev, tanulok.osztaly, leadasok.idopont, leadasok.mennyiseg
FROM `leadasok`, tanulok
WHERE tanulok.tazon = leadasok.tanulo and osztaly LIKE "1_"SELECT tanulok.nev, tanulok.osztaly, leadasok.idopont, leadasok.mennyiseg
FROM `leadasok`, tanulok
WHERE tanulok.tazon = leadasok.tanulo and osztaly = 1"az osztály oszlop értékei amiket keresünk "1A" és "1B". Mysql-t használtam a feladatok megoldásához.
Miért ad a két megoldás azonos(jó) eredményt? A másodiknak nem kellene hibásnak lenne?
-
DS39
nagyúr
Köszi, mindkettőtöknek, próbálkozom ezekkel.

-
velizare
nagyúr
-
Ispy
nagyúr
-
DS39
nagyúr
sziasztok!
nekem egy olyan segítség kellene, hogy hogyan lehet dinamikusan oszlopokat létrehozni egy select-ben?
pl. van egy lista jelenleg
user_id | össz_pontés egy ilyesmi szeretnék csinálni.
user_id | össz_pont | 2017-01-01 | 2017-01-02 | 2017-01-03 | 2017-01-04 | 2017-01-05A dátumok alá, az adott napon szerzett pontok jelennének meg. Ez nyilván nem gond, viszont nem fix dátumok lennének az oszlopok, hanem lenne egy TOL - IG dátum paraméter, ami alapján kellene létrehozni az oszlopokat.
remélem érhetően írtam le, és tudtok segíteni.

-
tboy93
nagyúr
Koszi mindenkinek. Nincs olyan sor amit keynek tudtam volna hasznalni, ezert is irtam ide elso sorban. Vegul irtam egy updatet es abban cserelgettem ki az id-ket, eleg fapad, de 50 rekordnal meg belathato idon belul megvoltam vele.
A kapcsolotabla nem jutott eszembe

-
velizare
nagyúr
ha van olyan oszlopod, amit kulcsként tudsz használni (reg? felhasznalonev?), akkor simán összejoinolod a régi táblát az alapján az újba.
pl.update FelhazsnaloNEW
set FelhazsnaloNEW.VonalKod = FelhasznaloOLD.Vonalkod, FelhazsnaloNEW.Kep = FelhasznaloOLD.Kep, FelhazsnaloNEW.Jelszo = FelhasznaloOLD.Jelszo, , FelhazsnaloNEW.FelhasznaloNev = FelhasznaloOLD.Felhasznalonev, FelhazsnaloNEW.FactFelh = FelhasznaloOLD.FactFelhasz
from FelhazsnaloNEW
inner join FelhasznaloOLD
on FelhazsnaloNEW.Reg=FelhasznaloOLD.reg
előtte azért csinálj mentést a tábláról. =]
ha nincs, akkor marad az, hogy a biorobot megcsinálja kézzel.
ja és ha már typot emlegettük, a FelhazsnaloNEW-ban már van egy.
-
Cathfaern
nagyúr
Egy darab update-et kell írni, abban csak lecserélgetni az ID-kat. Nem úgy gondoltam, hogy kézzel irogassa át a táblákat
Sok mindent lehet rá írni persze, de ha 50x kell megcsinálni, akkor bármit is írsz rá az tovább fog tartani, mint ha megcsinálod kézzel. Feltéve, hogy elsőre jól írsz meg mindent, mert ha már valamit debugolni kell (akár egy elgépelést), akkor sokkal tovább fog tartani 
-
Ispy
nagyúr
-
DS39
nagyúr
hát azért az elég fapad megoldás lenne, és 50x 5-6 oszlop tartalmát módosítani...
ha ez az összeírás egy excelben történt, és nem papíron akkor könnyen megoldható.
ha papíron, akkor is egyszerűbb létrehozni egy kapcsoló táblát ezzel az 50 sorral (régi id, új id), utána lehet rá írni, egy update sql-t a többi adat áttöltésére. -
Cathfaern
nagyúr
-
tboy93
nagyúr
Sziasztok!
Adott egy feladat:
Van két táblám, közel azonos struktúrával.
FelhasznaloOLD {Id, Nev, VonalKod, Aktiv, Reg, Kep, Jelszo, Felhasznalonev, FactFelhasz}
FelhazsnaloNEW {FelhasznaloId, TeljesNev, reg, Aktiv, Vonalkod, Jelszo, FelhasznaloNev, Kep, FactFelh}
A FelhazsnaloNEW táblában van ~400 rekord, a FelhasznaloOLD táblában ~50. Az OLD táblában lévő emberek megtalálhatóak mind a NEW táblában is, viszont nem egyezik sem a nevük, sem az id-jük. Nekem össze van írva hogy melyik-melyik id-vel van párban. Szóval pl. Kis Ilonka az OLD táblában 42-es id-vel szerepel, a NEW-ban meg 65-el és a neve is simán lehet Kovács Péterné.
A kérdés az, hogy hogyan másoljam át az OLD table-ből a VonalKod, Kep, Jelszo, Felhasznalonev, FactFelhasz oszlopokat a NEW table megfelelő rekordjába?
-
tvse1995
senior tag
& -Zeratul-
Kis változtatásokkal ránézésre jó eredményt adott:SELECT legfi.berlo_kulcs,
legfi.nev,
legfi.szuletesi_ido,
jarmukolcsonzes.kolcsonzes_kulcs,
jarmukolcsonzes.kiadas,
jarmukolcsonzes.visszavetel,
jarmukolcsonzes.jarmu_kulcs,
jarmu.marka,
jarmu.tipus
FROM
(SELECT berlo_kulcs,
nev,
szuletesi_ido
FROM
(SELECT dense_Rank() Over (Order By szuletesi_ido DESC) rn,
berlo_kulcs,
nev,
szuletesi_ido
FROM berlo
)
WHERE rn IN (2,3)
) legfi ,
jarmukolcsonzes ,
jarmu
WHERE legfi.berlo_kulcs = jarmukolcsonzes.berlo_kulcs(+)
AND jarmu.jarmu_kulcs(+) = jarmukolcsonzes.jarmu_kulcs;Köszönöm mindenkinek, a határidő lejárt, remélem elfogadják.

-
bpx
őstag
RANK helyett DENSE_RANK-ot kellene használni.
Magyarázat helyett itt a különbség a kettő között, így talán érthetőbb:
ADAT RANK DENSE_RANK
---- ---- ----------
A 1 1
A 1 1
A 1 1
B 4 2
B 4 2
C 6 3
C 6 3
D 8 4
D 8 4
D 8 4
E 11 5
E 11 5
F 13 6Ezen kívül a nev és szuletesi_ido oszlopokra is szükség van.
Ja látom az már megvolt.
-
Ablakos
addikt
-
tvse1995
senior tag
Ez a változat lefut de nem ad vissza semmit:
Select legfi.berlo_kulcs,
legfi.nev,
legfi.szuletesi_ido,
jarmukolcsonzes.kolcsonzes_kulcs,
jarmukolcsonzes.kiadas,
jarmukolcsonzes.visszavetel,
jarmukolcsonzes.jarmu_kulcs,
jarmu.marka,
jarmu.tipus
From
(Select berlo_kulcs, szuletesi_ido, nev
From ( Select Rank() Over (Partition By berlo_kulcs Order By szuletesi_ido Desc) rn, berlo_kulcs, szuletesi_ido, nev From berlo) Where rn In (2,3)) legfi
,jarmukolcsonzes
,jarmu
Where legfi.berlo_kulcs = jarmukolcsonzes.berlo_kulcs(+)
And jarmu.jarmu_kulcs(+) = jarmukolcsonzes.jarmu_kulcsIgen, nem egyszerű ha ekkora késleltetéssel tudja meg az ember, hogy jó-e amit kitalált.

-
Ablakos
addikt
-
tvse1995
senior tag
-
tm5
tag
esetleg így: (adatok nélkül nem tudtam kipróbálni, de így tünt a legszimpatikusabbnak)
Select legfi.berlo_kulcs,
legfi.nev,
legfi.szuletesi_ido,
jarmukolcsonzes.kolcsonzes_kulcs,
jarmukolcsonzes.kiadas,
jarmukolcsonzes.visszavetel,
jarmukolcsonzes.jarmu_kulcs,
jarmu.marka,
jarmu.tipus
From
(Select berlo_kulcs
From ( Select Rank() Over (Partition By berlo_kulcs Order By szuletesi_ido Desc) rn, berlo_kulcs From berlo) Where rn In (2,3)) legfi
,jarmukolcsonzes
,jarmu
Where legfi.berlo_kulcs = jarmukolcsonzes.berlo_kulcs(+)
And jarmu.jarmu_kulcs(+) = jarmukolcsonzes.jarmu_kulcs -
tvse1995
senior tag
-
Ablakos
addikt
Talán ilyesmi.

Select legfi.berlo_kulcs,
legfi.nev,
legfi.szuletesi_ido,
jarmukolcsonzes.kolcsonzes_kulcs,
jarmukolcsonzes.kiadas,
jarmukolcsonzes.visszavetel,
jarmukolcsonzes.jarmu_kulcs,
jarmu.marka,
jarmu.tipus
From
(Select berlo_kulcs From ( Select Rank() Over (Partition By berlo_kulcs Order By szuletesi_ido Desc) rn, berlo_kulcs From berlo Where rn In (2,3)) legfi
,jarmukolcsonzes
,jarmu
Where legfi.berlo_kulcs = jarmukolcsonzes.berlo_kulcs(+)
And jarmu.jarmu_kulcs = jarmukolcsonzes.jarmu_kulcs -
tvse1995
senior tag
Sziasztok, adottak az alábbi táblák és ez a feladat:
Kérdezze le a 2. és 3. legfiatalabb bérlők és tranzakcióik legfontosabb adatait. Ha több 2. és 3. legfiatalabb van akkor mindegyikük adatait adja meg! Minden regisztrált bérlőt vegyen figyelembe függetlenül attól, hogy kölcsönzött-e már.
Oszlopok sorrendje és neve: berlo_kulcs, nev, szuletesi_ido, kolcsonzes_kulcs, kiadas, visszavetel, jarmu_kulcs, marka, tipusOracle sql developer 4.1.3.20-ban dolgozunk ha ez számít.
Minden fajta segítségnek nagyon örülnék

Előre köszönöm! -
X Factor
addikt
Sziasztok,
SQL 2008R2 updatelve lett SQL 2014-re. Management Studio megy is, de ha belépek vele a szerverre, akkor ott a verzió 10.50.4000, ezt kéne 11 fölé updatelni.
-
bpx
őstag
-
martonx
veterán
-
bambano
titán
-
bpx
őstag
Nagyon jó, már csak az adatbázis típusa kellene, mert pl. Oracle-ben ez egy sima matview és nem írunk sem MERGE-t, sem INSERT .. SELECT-et, mert azoknál hatékonyabb.
A szűrés nélküli, teljes táblára vonatkozó DELETE-et meg csak indokolt esetben használjuk, mert egyébként felesleges pazarlás. Simán TRUNCATE és kész.
-
Ispy
nagyúr
-
Cathfaern
nagyúr
-
martonx
veterán
-
Cathfaern
nagyúr
Nem nagyon használtam még a MERGE-et, de rákeresve az nem töröl a cél táblából ha a forrás táblából kitöröltek egy sort, és itt az is feltétel volt.
rum-cajsz
Meg az is kérdés, hogy mennyi adat változik? Szóval ha mondjuk a sorok 90%-a állandó marad, akkor lehet érdemes megpróbálni insert / update / delete-el eljátszani. De ha a sorok 90%-a változik napról napra, akkor a delete -> insert verziónál nem nagyon lesz hatékonyabb. Mondjuk ha emberi mennyiségű adatról van szó, akkor meg kb. mindegy
(és szerintem ha többi milliárd rekordos táblák lennének, akkor nem itt és nem így merülne fel a kérdés, de lehet tévedek) -
rum-cajsz
őstag
Mivel nem csak új sort tudnak felvinni a felhasználóid, hanem már meglévő sorok adataiban is módosíthatnak mégis az a legegyszerűbb technikailag, amit Cathfaern javasolt.
Martonx kolléga megoldásával az a probléma, hogy ő feltételezi, hogy a már elmentett adatokon nem változtatnak a felhasználók. Ha ez megtörténhet, akkor neked a teljes táblákat kell összehasonlítanod mondjuk a MINUS operátorral.
De az is fontos kérdés lehet, hogy milyen adatbázisban akarod működtetni? És mekkora adatmennyiségről (hány sor) van szó?
-
htcwanted
csendes tag
Például: table_B egy megosztott tábla amiben a userek tudnak frissíteni információt.
table_A mindennap frissül table_B alapján, és más helyeken van használva, reportok, nézetek, Front End.
Dinamikus frissítés sajnos nem lehetséges, a napi egyszeri automatikus szinkronizálás jelenleg teljesen kiszolgálja a különböző funkciókat. -
martonx
veterán
Catfathern válasza teljesen jó.
Viszont teljesítményben nem éppen optimális. A MERGE adja a legjobb teljesítményt, viszont azt nem két sor használni, bár nem is olyan vészes.
Hozzáteszem, ha viszont mindig csak új adatot kell hozzáadni, akkor ez nyilván jobb teljesítményt fog hozni, mint egy merge:INSERT tbl_A (col, col2)
SELECT col, col2
FROM tbl_B
WHERE NOT EXISTS (SELECT col FROM tbl_A A2 WHERE A2.col = tbl_B.col); -
htcwanted
csendes tag
-
bpx
őstag
-
Cathfaern
nagyúr
-
htcwanted
csendes tag
Alap SQL kérdés: Van két táblám: table_A és table_B, ugyanazokat az oszlopokat tartalmazza mindkét tábla. A table_B -ben naprakész az összes sor. Kérdés: mi a legegyszerübb módja frissíteni table_A-t, table_B alapján.
Sima UPDATE query, JOIN vagy MERGE használata?
- például a második sort valaki törölte table_B-ben, az törlődjön a table_A-ben is
- például érték változás történt a harmadik sor table_B-ben, ugyanaz az érték változzon table_A-ben is
- például egy új sort adtunk table_B-hez, ezt a sort adja hozzá table_A -hez is.
Lehetséges mindez egy Query-ben leírva?
Előre is köszönöm a hozzáértők segítségét
-
Vesporigo
aktív tag
Anno 12-13 éve suliban tanultam SQL-t, mert kellett egy vizsgámhoz, de csak nagyon alap szinten. Most újra nekikezdenék, de már rendesen, az alapoktól. Visszaolvasgattam, milyen könyveket ajánlottatok páran, főleg ezek kerültek elő:
- SQL-Iekérdezések földi halandóknak
- Adatmodellezés - SQL és ACCESS alkalmazás - SQL Server és ADO
- Halassy Béla: Az adatbázistervezés alapjai és titkaiGondolom, a Halassy-féle könyvvel kellene kezdenem, viszont ha van valami újabb/jobb/szebb/érthetőbb/stb., amit ajánlanátok, azt örömmel venném.

Egyébként angollal sincs bajom, online kurzusokat is csináltam már, szóval ha inkább olyan online vagy webes anyagot mondanátok, ami egészen az alapoktól magyaráz érthetően, annak is örülnék. (Coursera, Udemy, bármi ilyesmi)
Előre is köszi a segítséget!

-
DrojDtroll
veterán
-
DrojDtroll
veterán
-
Ispy
nagyúr
Accesben le tudsz futtatni SELECT, INSERT, UPDATE utasítást, vagy meg tudsz hívni tárolt eljárást, függvényt, de ez:
IF ....
SELECT ....
FROM ....nem értelmezhető egyiknek sem. Akkor berakod egy tárolt eljárásba, paraméterekkel és ott futtatod.
Egyébként az IF syntaxa SQL-ben:
IF ....
BEGIN
valami
END
ELSE
BEGIN
akármi
END -
DrojDtroll
veterán
Már szebben megoldottam.
SELECT Year([Dátum]) AS Kif1, észlelések.Körzet, IIf([Allatok].[védettség]="védett",[észlelések].[Faj]+" (mérsékelten veszélyeztetett)",[észlelések].[Faj]+" (veszélyeztetett)") AS Kif2
FROM osztályok INNER JOIN (észlelések INNER JOIN Allatok ON észlelések.Faj = Allatok.[Faj neve]) ON osztályok.id = Allatok.Osztály
WHERE (((Year([Dátum]))=2011) AND ((észlelések.Körzet)="Jósvafő")) OR (((Year([Dátum]))=2011) AND ((észlelések.Körzet)="Eger"));Normál SQL IF miért nem működik az Access-ben?
-
DrojDtroll
veterán
Sziasztok.
Ez miért nem fut le?
IF (Allatok.védettség)="védett"
(SELECT Year([Dátum]) AS Kif1, [Faj]+" (mérsékelten veszélyeztetett)" AS Kif2, észlelések.Körzet, Allatok.védettség
FROM osztályok INNER JOIN (észlelések INNER JOIN Allatok ON észlelések.Faj = Allatok.[Faj neve]) ON osztályok.id = Allatok.Osztály
WHERE (((Year([Dátum]))=2011) AND ((észlelések.Körzet)="Jósvafő") AND ((Allatok.védettség)="védett")) OR (((Year([Dátum]))=2011) AND ((észlelések.Körzet)="Eger"));)
ELSE
(SELECT Year([Dátum]) AS Kif1, [Faj]+" (veszélyeztetett)" AS Kif2, észlelések.Körzet, Allatok.védettség
FROM osztályok INNER JOIN (észlelések INNER JOIN Allatok ON észlelések.Faj = Allatok.[Faj neve]) ON osztályok.id = Allatok.Osztály
WHERE (((Year([Dátum]))=2011) AND ((észlelések.Körzet)="Jósvafő") AND ((Allatok.védettség)="védett")) OR (((Year([Dátum]))=2011) AND ((észlelések.Körzet)="Eger"));) -
DNReNTi
őstag
-
Ispy
nagyúr
-
Mittu88
senior tag
Srácok, új vagyok ebben a topicban, de riszpekt, hogy milyen kulturáltak voltatok kezdosql-el...
Még csak most olvasom vissza a topicot, de még pár hozzászólásába belefutok és szétverem a céges billentyűzetet. Hihetetlen, hogy ezek a lények még szaporodnak is a XXI. században. -
PumpkinSeed
addikt
Szerintem neked pont egy Elasticsearch Kibana párosra van szükséged, ahol a már meglévő adatokat egy interpreter segítségével CSV-ből átteszed az Elasticsearch-be amit azután a Kibana segítségével szépen meg tudsz jeleníteni és minden látsz a webes felületen, mikor mi hogyan lett hozzáadva. Itt egy kis ismertető a Kibana-ról Illetve a full Elastic-stack itt van leírva.
![;]](//cdn.rios.hu/dl/s/v1.gif)
-
martonx
veterán
Szia!
--megkeresed a neked megfelelő collationt
SELECT * FROM sys.fn_helpcollations()
--majd alkalmazod
CREATE DATABASE CaseSensitive
COLLATE SQL_Latin1_General_CP1_CS_AS --így, de ez csak egy példa, ez épp nem a hungarian
select 'a' C union
select 'á' C union
select 'b' C
order by C
select N'a' C union
select N'á' C union
select N'b' C
order by CAmi a sorba rendezős kérdésedet illeti, tudtommal MSSQL-nél ezt így nem tudod megadni. Ha az adat típus varchar, akkor ha a fene fenét eszik is nem unicode rendező algoritmust fog az sql engine rá használni.
Ám ha az adat típus nvarchar (azaz unicode varchar), akkor meg ha a fene fenét eszik is unicode rendező algoritmust fog rá használni.De igaziból lehet, hogy elég a fenti kódrészletem, és a jól beállított collation, és máris jó lesz a sorba rendezés? Vagy a kettő együtt? Lusta voltam kipróbálni, írd majd le a nyerő kombinációt!
-
Vici83
csendes tag
Sziasztok!
Lenne egy problémám. Elsősorban azokat szeretném zavarni a kérdésemmel, akik már használták a Visual Studio adatbázis kezelő részét. Ugyanis Visual Studio-ban kell SQL parancsokkal adatbázist kezelnem (sajnos nálunk az érettségin csak ezt tudják a gyerekek használni). Viszont nem találok arra megoldást, hogy hogyan lehetne azt beállítani, hogy alapértelmezett magyar rendezési sorrendet és UTF-8 karakterkódolást használjon egy adatbázis létrehozásakor (feladat az érettségin). Tehát az a kérdésem, hogy ezt a MySQL parancssort hogyan lehetne a Visual Studio-ba úgy átalakítani, hogy értelmezze is:
CREATE DATABASE papirgyujtes
DEFAULT CHARACTER SET utf8
COLLATE utf8_hungarian_ci;
Segítségeteket előre is köszönöm! -
DS39
nagyúr
-
martonx
veterán
Ez így is van, csak jelzem, hogy éppen a saját ajánlásuk miatt MSSQL-ben a foreign key az automatikusan indexelődik. Meglepődnék ha más SQL-eknél ez nem pont ugyanígy lenne.
Azaz továbbra is fenntartom, hogy manuálisan külön felesleges indexet kreálgatni FK-hoz, ha azt előtte már úgyis automatikusan megcsinálta a db motor. -
Lacc
aktív tag
-
martonx
veterán
-
Petya25
őstag
Ha csak annyit szeretnél, hogy az egyik DB-ből átolvass egy másik szerver DB-jébe akkor ezzel nem kell így trükközni.
Csinálsz egy sql usert a távoli DB-ben.
Itt a Linked Server nevébe beírod a távoli szerver nevét, a Security fülön meg megadott Remote loginnak a távoli sql usert a jelszóval.
És átolvasol teljes útvonallal: select * from [gép].[db].dbo.[tábla] -
Lacc
aktív tag
-
bambano
titán
-
Lacc
aktív tag
Helló.
SQL (MySQL, PostgreSQL) esetében a ForeignKey-ekre érdemes még Indexet rádobni a jobb kereshetőség érdekében?
-
Ispy
nagyúr
-
DS39
nagyúr
-
Ispy
nagyúr
-
DS39
nagyúr
Sziasztok!
MS SQL-es kérdésem lenne, van két adatbázis szerver, az egyiket be szeretném csatolni a másik alá, Linked Server-ként.
Tudom, hogy google a barátom, de ezúttal még nem vezetett rá a tökéletes megoldásra.
Tudtok segíteni hogy ezekbe a mezőkbe milyen paramétereket vár?
Van ip címem, szervernevem, csak nem tudom mit hova. -
fordfairlane
veterán
-
Petya25
őstag
-
martonx
veterán
-
martonx
veterán
-
Petya25
őstag
MS SQL-ben sokszor szívok idő formátummal mint kimenet.
táblában datetime
2016-12-01 02:14:34.927lekérdezve convert(time, ....) után
02:14:34.9270000Na ezt simán excelbe tolva nem lesz ám rendes idő amivel lehetne tovább számolni.
Valami tipp egy rendes "02:14:34" formátumra?
-
bugizozi
őstag
fordfairlane, DS39: Király, sikerült, köszi mindkettőtöknek a gyors segítséget!

Új hozzászólás Aktív témák
-
3400 - 3301
6041 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fórumok
- Szoftverfejlesztés
- SQL kérdések
- (kiemelt téma)
- Energiaital topic
- Kínai és egyéb olcsó órák topikja
- Milyen légkondit a lakásba?
- Kerékpárosok, bringások ide!
- Mégis megkapja a HDMI 2.1-et a Steam Machine?
- Xiaomi 17 - még mindig tart
- Megújult mobilos felület, fórumos ráncfelvarrás a PROHARDVER! lapcsaládon
- E-roller topik
- CADA, Polymobil, és más építőkockák
- Mibe tegyem a megtakarításaimat?
- További aktív témák...
- Gigabyte H77M-D3H + Core I7 2600 + 4x4GB DDR3 RAM (Félkonfig)
- 1TB és 2TB 7.2k 3.5" SAS HDD-k, több darab, HDSentinel 100/100
- Asus Zenbook 14X OLED AMD Ryzen 9 5900HX 16 GB LPDDR4X 4266 MHz RAM 1 TB SSD
- Magyar ! DELL LATITUDE 7420 2-in-1 14"iPS TOUCH / i7-1165G7, 16GB/512GB NVMe / irisXE TB4 +SZLA GAR
- Samsung Galaxy S24+ Plus 12/256GB Újszerű,Kártyafüggetlen,Dobozos,Tartozékaival. 1 Év Garanciával!
- Telefon Felvásárlás!! iPhone 14/iPhone 14 Plus/iPhone 14 Pro/iPhone 14 Pro Max
- Honor 400 Lite / 8/256GB / Kártyafüggetlen / 12Hó Garancia
- Bomba ár! HP EliteBook 840 G3 - i5-6GEN I 8GB I 128GB SSD I 14" FHD I Cam I W11 I Garancia!
- MacBook felváráslás!! MacBook, MacBook Air, MacBook Pro
- AKCIÓ! Dell XPS 13 9305 13 FHD üzleti notebook -i5 1135G7 8GB DDR4 512GB SSD Intel IRIS XE W11
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest









![;]](http://cdn.rios.hu/dl/s/v1.gif)

