- AMD Navi Radeon™ RX 9xxx sorozat
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Szünetmentes tápegységek (UPS)
- Mesébe illő csodakábelt tervezett a GeForce-ok leégése ellen a Segotep?
- Rendkívül ütőképesnek tűnik az újragondolt Apple tv
- Házimozi haladó szinten
- Erősítő, hangfalak
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Kormányok / autós szimulátorok topikja
- 3D nyomtatás
Új hozzászólás Aktív témák
-
DS39
nagyúr
válasz
kw3v865
#3399
üzenetére
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?

-
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
válasz
kw3v865
#3394
üzenetére
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?
-
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 -
-
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.
-
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
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.

-
Ispy
nagyúr
válasz
Chesterfield
#3379
üzenetére
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
válasz
Chesterfield
#3379
üzenetére
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
-
válasz
DrojDtroll
#3375
üzenetére
A macskaköröm a második SQL végén.
-
DS39
nagyúr
válasz
DrojDtroll
#3370
üzenetére
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.

-
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.

-
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

-
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 
-
DS39
nagyúr
válasz
Cathfaern
#3360
üzenetére
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. -
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
válasz
Ablakos
#3356
üzenetére
& -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
válasz
Ablakos
#3356
üzenetére
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.
-
tvse1995
senior tag
válasz
Ablakos
#3354
üzenetére
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.

-
tvse1995
senior tag
-
tm5
tag
válasz
tvse1995
#3351
üzenetére
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 -
Ablakos
addikt
válasz
tvse1995
#3349
üzenetére
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
válasz
htcwanted
#3336
üzenetére
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.
-
Cathfaern
nagyúr
válasz
martonx
#3337
üzenetére
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
válasz
htcwanted
#3338
üzenetére
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
válasz
htcwanted
#3333
üzenetére
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
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!

-
Ispy
nagyúr
válasz
DrojDtroll
#3329
üzenetére
MS SQL?

-
Ispy
nagyúr
válasz
DrojDtroll
#3327
üzenetére
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
válasz
DrojDtroll
#3326
üzenetére
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"));) -
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
válasz
kezdosql
#3270
üzenetére
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
újonc
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! -
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
válasz
martonx
#3316
üzenetére
Ezt én is így gondoltam.
Microsoft-ok szerint nem árt, link, Indexing FOREIGN KEY Constraints fejezet cím.
Amúgy ha összetett keresést alkalmazok webappból (dropdownlistában ott vannak a foreign key kulcsok) akkor gyorsabb, érezhetően gyorsabb 500.000 rekordnál, még szerme is

-
-
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
Helló.
SQL (MySQL, PostgreSQL) esetében a ForeignKey-ekre érdemes még Indexet rádobni a jobb kereshetőség érdekében?
-
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. -
Petya25
őstag
válasz
fordfairlane
#3306
üzenetére
Köszi, működik.
-
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
- ÁRGARANCIA! Épített KomPhone Ultra 9 285K 32/64GB RAM RTX 5080 16GB GAMER PC termékbeszámítással
- Apple iPhone 13 Mini 128GB,Újszerű,Dobozával,12 hónap garanciával
- Keresünk iPhone 15/15 Plus/15 Pro/15 Pro Max
- KÉSZLETKISÖPRÉSI KARÁCSONYI ULTRAAKCIÓ! - MacBook Air M4 16GB 512GB Garancia!
- Samsung Galaxy S25 Ultra / 12/512GB / Kártyafügetlen / MediaMarkt Garancia 2028.12.02.-ig
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest









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



