Új hozzászólás Aktív témák
-
nyunyu
félisten
Akkor az IS NULL-okat cseréld = 0-ra
SELECT DISTINCT T1.rendeles_id
FROM rendeles AS T1
JOIN tetel AS T2
ON T1.rendeles_id=T2.rendeles_id
AND (T2.kuldes_id = 0
OR T2.szamla_id = 0)
WHERE T1.rendeles_id NOT IN (SELECT rendeles_tmp FROM user);Elég háklis szoktam lenni a rendszerszervezőkre, ha olyan mezőkre is specelnek NOT NULL constraint-t, ahol semmi keresnivalója.
Pláne, hogy a kuldes_id-nek, szamla_id-nek logikusan foreign keynek kellene lennie, ami a kuldes, szamla táblák id mezőjére mutat.
Ott meg szigorúan NULL a gyerek tábla mezője, ha éppen nem mutat a szülő egyik rekordjára se![ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
pch
senior tag
Ez nem azt az eredményt adja.
Mégegyszer: A kuldes_id és a szamla_id a tételeknél van. Egy rendeléshez több tétel is kapcsolódik. Ha a tételnél a kuldes_id-be 0 van akkor ugye azzal még kell foglalkozni. De van olyan eset is ahol mondjuk 10 tételnek már van kuldes_id-je ami nem 0 de egynek nincs.
Akkor azzal még van teendő.
http://sb-soft.hu - "A" számlázó
-
nyunyu
félisten
Rendeléseket kérdezted:
Kellene egy lista amibe azon a rendelések vannak amin akad még tennivaló.Amit írtam queryt, az visszaadja mindegyik rendelést, amihez tartozik legalább egy kuldes_id=0 vagy szamla_id =0 tétel.
Ha a konkrét, még nem kész megrendelés tételeik is kellenek, akkor
select t1.rendeles_id, t2.tetel_id
...[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
RedHarlow
aktív tag
Sziasztok,
Egy táblából szeretnék bizonyos adatokat elmenteni egy másik táblába. A tábla minden sora kell így az eredeti táblával megegyező táblastruktúrára lenne szükségem. Ezt hogy a legegyszerűbb megcsinálni? -
nyunyu
félisten
CTAS az emlékeim szerint szabványos szintaxis, mennie kéne nem Oracle DBken is.
Ha a SELECT után nem * áll, akkor csak a hivatkozott oszlopok fognak bekerülni az új táblába az eredeti adattípussal.
* esetén minden oszlop másolódik.Viszont arra figyelni kell, hogy a másolat táblán csak a mezők típusai fognak másolódni.
Constraintek (primary key, foreign key..), indexek NEM, azokat neked kell kézzel létrehozni, figyelve arra, hogy ezek nevei nem egyezhetnek az eredeti táblán használt constraintek, indexek neveivel!CTAS végére írt WHERE mögé írt feltétellel tudod megadni, hogy melyik sorokat másolja át az eredeti táblából.
Ha nincs WHERE, akkor mindent másol, de ha pl. WHERE 1=2;-t írsz, akkor csak a táblaszerkezet fog létrejönni, adatok nélkül.[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
nyunyu
félisten
Ja, CTAS nem csak tábla másolásra jó.
Pl. van egy giga lekérdezésed, ami sok táblából lapátol össze adatot, akkor a konkrét végeredményt is el tudod úgy menteni, hogy a SELECT elé írod, hogy
CREATE TABLE <táblanév> AS
Itt persze figyelni kell arra, hogy az eredeti lekérdezésben minden mezőnév egyedi legyen.
Meg arra is figyelni kell, hogy az eredményhalmazban szereplő leghosszabb string alapján határozza meg a számított VARCHAR() mezők hosszát, így ha a létrehozott táblába akarsz később insertálni, akkor nem biztos, hogy bele fog férni ugyanannak a lekérdezésnek az eredménye, ha mondjuk egy oszlopba két stringet fűzöl össze, aztán később hosszabb stringek lesznek a forrás táblákban...[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
petyus_
senior tag
Sziasztok!
MS SQL Serverben kellene írnom egy olyan lekérdezést, ami több oszlopra csinál free-text szűrést, nem teljes egyezést keresek, hanem csak szó elejit. Kb ezt kellene összehoznom:
SELECT * FROM table
WHERE (col1 LIKE 'str1%' or col1 LIKE 'str2%') or
(col2 LIKE 'str1%' or col2 LIKE 'str2%')A probléma, hogy nem tudom a search-filter hány szóból áll. A CONTAINS jónak tűnne, mert ott meg tudom adni az összes szót OR-ral, de ahhoz full text indexing kellene, és kicsit overkillnek érzem, mivel ezek az oszlopok csak egy nevet tárolnak, tehát nem egy hosszú szöveget. A search-filtert átadhatom egyben is, hogy sql-ben csináljak valamit, vagy akár mehet user defined table type-ként.
Tudtok javasolni valalmi megoldást a CONTAINS-en kívül?
-
pch
senior tag
Üdv!
regexp -be kellene segítség, de lehet nem is lehet megvalósítani amit akarok...
Szóval van egy tábla (cikk) amibe az információknál (information) van a termékeknek az EAN kódja megadva. Azaz a leírás tartalmazza.
Most szeretném azt megoldani, hogy ahol nem az ean mezőbe van az EAN kód ott egy update-t lefuttatva belerakom.
Egyelőre a lekérdezésnél tartok, de a regexp nem nagyon úgy működik ahogy elképzeltem és a google csak a Where feltételbe hozza példának.
Szóval:SELECT cikk.information PREGEXP '^[0-9]{13}$' FROM cikk WHERE cikk.cikk_id='2';
Nos ez az ami nem ad csak egy 0-t. Egyáltalán lehet ezt így? Vagy hogy kellene hatékonyan kiszűrni az adatokat egy mezőből?
Vagy írjam meg php-ba ciklusba?Köszi!
http://sb-soft.hu - "A" számlázó
-
tm5
tag
Erről a PREGEXP-ről még soha nem hallottam SQL SELECTben. Milyen SQL szerverről beszélünk itt? Mert eléggé eltérő módon támogatják a regexp-et, vagy nem.
Valami ilyesmi kellene:
UPDATE cikk
SET information = <az EAN forrása>
WHERE information NOT LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' -
pch
senior tag
Ez az update nem azt csinálja. Lehet félreérthető voltam.
Szóval az information mezőbe valahol van az ean kód. Ezt akarom átrakni egy ean mezőbe.
Ugye a regxp azt csinálja, hogy megnézi a szövegben azt a részt ahol egymás után 13 szám van. Azaz a bemenő szövegből az ean marad (Jó esetben). Ezt meg az update-nél fel tudom már használni.http://sb-soft.hu - "A" számlázó
-
nyunyu
félisten
Szerintem a regexp_like és regexp_substr függvényeket keresi, de utána kéne nézni az adott DB motornál mi a pontos szintaxisuk.
Valami ilyesmire gondoltam:
UPDATE cikk
SET ean = regexp_substr(information, '[:digit:]{13}')
WHERE regexp_like(information, '[:digit:]{13}');[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
nyunyu
félisten
Ahogy nézegetem, nem Oracle környezetekben eléggé kihívás a regexp_substr-nek megfelelő funkcionalitás, általában nincs olyan függvény, ami csak a mintának megfelelő részstringet adja vissza.
Pl. MS SQL Servereken lehet bohóckodni a
substr(information, patindex('%[0-9]{13}%', information), 13)
-mal.Meg a számjegy osztályra hivatkozást szögletes zárójelbe kell csomagolni: [[:digit:]], ehelyett egyszerűbb/rövidebb a 0-9 karaktereket matchelni, ahogy írtátok a [0-9]-cel.
[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
Petya25
őstag
MS SQL-ben kellene egy kis pivot segítség (Excelben 2 katt…)
Csak adott számú dátum kombináció van (10) nem "végtelen".select dátum, hely, érték from tábla
2022-08-15 BP 21
2022-08-16 BP 25
2022-08-17 BP 23
2022-08-15 VÁC 15
2022-08-16 VÁC 34
2022-08-17 VÁC 2helyett ez kellene:
2022-08-15 2022-08-16 2022-08-17
BP 21 25 23
VÁC 15 34 2[ Szerkesztve ]
Antonio Coimbra de la Coronilla y Azevedo, bizony!
-
nyunyu
félisten
válasz Petya25 #5567 üzenetére
SELECT * FROM
(
SELECT datum, hely, ertek
FROM tabla
)
PIVOT
(
SUM(ertek)
FOR datum IN ('2022-08-15', '2022-08-16', '2022-08-17')
)
ORDER BY hely;Kb. 5 percbe tellett testreszabni az első szembejövő PIVOT példát. (PIVOT szintaxis jóideje szabványos, mindegy melyik DB tutorialját nézed)
Bár lehet, hogy a dátumok kézzel felsorolása helyett elegánsabb lenne alselectet írni:
FOR datum IN (SELECT DISTINCT datum FROM tabla ORDER by datum)
[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
Petya25
őstag
Köszi ez nagyon gyors volt.
de sajna ha átírom az éles beállításokra:
Msg 156, Level 15, State 1, Line 6
Incorrect syntax near the keyword 'PIVOT'.Egyébként a dátumból úgy kellene fejléc hogy az változó adat, nem fix, nem tudom előre definiálni a tartalmát.
Antonio Coimbra de la Coronilla y Azevedo, bizony!
-
Petya25
őstag
Már rájöttem a dologra.
Az ékezetet nem kezeli, megzavarta...Ez lett a megoldás:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.datum)
FROM tabla c order by 1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')set @query = 'SELECT hely, ' + @cols + ' from
(
select datum, ertek, hely from tabla
) x
pivot
(
max(ertek)
for datum in (' + @cols + ')
) p 'execute (@query)
Antonio Coimbra de la Coronilla y Azevedo, bizony!
-
nyunyu
félisten
válasz Petya25 #5569 üzenetére
Jó helyre raktad a zárójeleket?
Meg ahogy rákerestem T-SQL specifikus példákra, feltűnt, hogy mind a PIVOT előtti alquerynek, mind az azutáninak szoktak aliast adni.
Nem tudom, ez mennyire kötelező ott. (Oracle alatt opcionálisak)SELECT * FROM
(
SELECT datum, hely, ertek
FROM tabla
) x
PIVOT
(
SUM(ertek)
FOR datum IN (SELECT DISTINCT datum FROM tabla WHERE datum >= TRUNC(SYSDATE) - 7 ORDER by datum)
) p
ORDER BY hely;[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
sztanozs
veterán
válasz Petya25 #5574 üzenetére
select into-val csak nemlétező táblába lehet írni, vsz az a baj, hogy már létezik a táblád, insert into működhet, de minden mezőnek pont olyan típusúnak kell elnnie, mint a beküldött érték.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
szazbolha
addikt
Üdv, lehet a kérdésem nem teljesen idevaló, de hátha tudtok segíteni.
MS SQL 2019 expresst telepítettem egy kis fogyasztású gépre, amin Win10 pro van
Alig használjuk, ezért alvási idő 1 órára van állítva.
A gép elalszik de az első SQL csatlakozás vagy lekérdezés felébreszti, minden ok.
Újra elalszik és 10-ből 8x nem ébred újra ugyanazon lekérdezéstől.
Mi lehet az oka? Hogy lehet beállítani, hogy mindig felébredjen? -
hellsing71
tag
Üdv, segítség kéne. Minden (MariaDB) rekordban van (mások mellett) négy 1B-os mező. Kellene egy lekérdezés, ami listázza azokat, amelyekben egy érték legalább 2× megjelenik, pl.
0;0;128;192
0;0;0;0,
24;0;24;18.
Ismétlődés bármely pozícióban lehet.Ez nekem új, bármilyen útmutató jól jönne.
-
nyunyu
félisten
válasz hellsing71 #5581 üzenetére
Önmagával left joinolod a rekordokat hatszor (4*3/2 oszlopkombináció van, lásd kombinatorika), aztán ha van találat, akkor azok duplikáltak.
select distinct t.*
from tabla t
left join tabla t1
on t1.id = t.id
and t1.b = t.a
left join tabla t2
on t2.id = t.id
and t2.c = t.a
left join tabla t3
on t3.id = t.id
and t3.d = t.a
left join tabla t4
on t4.id = t.id
and t4.c = t.b
left join tabla t5
on t5.id = t.id
and t5.d = t.b
left join tabla t6
on t6.id = t.id
and t6.d = t.c
where t1.id is not null
or t2.id is not null
or t3.id is not null
or t4.id is not null
or t5.id is not null
or t6.id is not null;Persze ehhez az is kell, hogy minden rekordnak legyen egyedi azonosítója (példámban id mező), hogy ne két random rekord oszlopait hasonlítsd össze.
[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
Apollo17hu
őstag
válasz hellsing71 #5581 üzenetére
igy esetleg?
select t.*
from tabla t
where case
when t.m1 = t.m2 then 1
when t.m1 = t.m3 then 1
when t.m1 = t.m4 then 1
when t.m2 = t.m3 then 1
when t.m2 = t.m4 then 1
when t.m3 = t.m4 then 1
end = 1 -
nyunyu
félisten
Jut eszembe, oszlop egyenlőség vizsgálatokat lehetett volna egyből a where után pakolni:
select t.*
from tabla t
where t.b = t.a
or t.c = t.a
or t.d = t.a
or t.c = t.b
or t.d = t.b
or t.d = t.c;Talán ez lett volna a legegyszerűbb megoldás.
Hello IT! Have you tried turning it off and on again?
-
pch
senior tag
Az alábbi lekérdezést meg lehet csinálni egy lekérdezésbe vagy három kell?
Van két tábla.
Első táblába azonosító és hivatkozás.
Második tábla azonosító és hivatkozás.
Kellene a két tábla unioja, de úgy, hogy ahol az azonosító és a hivatkozás megegyezik ott az union-ba az egy sor legyen.
példa:
Első:
123;zöld
123;kék
123;sárga
Második:
456;zöld
123;kék
456;lilaKimenet:
123;zöld;-;-;
123;kék;123;kék
123;sárga;-;-;
-;-;456;zöld;
-;-;456;lila;Köszi!
http://sb-soft.hu - "A" számlázó
-
nyunyu
félisten
Erre való a full (outer) join:
select t1.id, t1.szin, t2.id, t2.szin
from tabla1 t1
full join tabla2 t2
on t2.id = t1.id
and t2.szin = t1.szin;[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
nyunyu
félisten
Elég a kettő:
select t1.id, t1.szin, t2.id, t2.szin
from tabla1 t1
left join tabla2 t2
on t2.id = t1.id
and t2.szin = t1.szin
union
select t1.id, t1.szin, t2.id, t2.szin
from tabla1 t1
right join tabla2 t2
on t2.id = t1.id
and t2.szin = t1.szin;Sima union kiszűri az ismétlődéseket az eredménylistából. (union all megtartaná a közös találatok mindkét példányát.)
[ Szerkesztve ]
Hello IT! Have you tried turning it off and on again?
-
lm83
őstag
Sziasztok.
Karakter kódolással kapcsolatban lenne kérdésem.
Hogy kellene állítani a táblákat, hogy amikor keresek, akkor külön kezelje az ékezetes karaktereket?
Most utf8mb_unicode_ci van állítva, de próbálkoztam itt magyarral is.
Keresek Nev-re és kidobja a Név-t is.
phpMyAdmin-ban dolgozom.Igazából php-ben csinálnám a lekérdezést, csak itt kérdeztem volna először, mert maga az adatbázisban is már így írja ki ez eredményeket.
Vagy programozásban tudnám ezt szűrni? -
nyunyu
félisten
Próbáld meg átállítani DB oldalon a default collationt, az állítgatja nyelv függően, hogy egyben/külön kezelje az ékezetes párokat, vagy order by-nál milyen sorrendben adja vissza a stringeket. (Pl. kerek, kerék, kérek sorrendje)
Hello IT! Have you tried turning it off and on again?
-
-
sztanozs
veterán
-
sztanozs
veterán
mysql 8+ tudja a magyar collation-t:
utf8mb4_hu_0900_as_cs
alatta csak a binary működik (abból viszont nincs case insensitive):
utf8mb4_binJOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
myphpadmin csak egy user interface az adatbázis előtt.
Ahogy nézem az a verzió nem támogatja a fejlettebb magyar collation-t, csak a utf8mb4_bin-t tudod használni, ha kell a megkülönböztetés (ez viszont nem jól rendez sorba, ha arra kellene).JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
Új hozzászólás Aktív témák
- Hobby elektronika
- BestBuy topik
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Hálózati / IP kamera
- Fotók, videók mobillal
- Okos Otthon / Smart Home
- Apple Watch Sport - ez is csak egy okosóra
- Az iPhone 15 volt a legkelendőbb készülék 2024 Q3-ban
- Alternatív kriptopénzek, altcoinok bányászata
- Politika
- További aktív témák...
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest