- LG V50 ThinQ Dual Screen - az 5G ára
- LG Velvet (4G) - megelőzte a híre
- Mobilhasználat külföldön
- Samsung Galaxy A54 - türelemjáték
- Profi EKG-s óra lett a Watch Fitből
- Samsung Galaxy S22 és S22+ - a kis vagány meg a bátyja
- Kiborult a Nothing Phone (3) pletykakosara
- Xiaomi 15 - kicsi telefon nagy energiával
- Magisk
- Xiaomi 14T Pro - teljes a család?
Új hozzászólás Aktív témák
-
Jim-Y
veterán
Sziasztok.
Azt szeretném megoldani, hogy a táblámban két oszlop együttesen legyen unique. Tehát ne lehessen beszúrni még egy olyan sort a táblába, ahol elsooszlop és harmadik oszlop együttesen már van egy sorban. Ha csak az egyik, vagy csak a másik már szerepel egy sorban attól még be lehessen szúrni.
Elsőnek webes kereséssel kezdtem, találtam is egy használható posztot: [link]
És csak a felől érdeklődnék, hogy szerintetek is így kell-e megoldani a fenti problémát? üdv
-
Jim-Y
veterán
válasz
fordfairlane #1465 üzenetére
Köszi, A megoldás így akkor az lett, hogy átállítottam a dátum oszlopt unique-ra, és az insertbe betettem egy IGNORE-t. Köszönöm a segítséget
-
Jim-Y
veterán
válasz
martonx #1462 üzenetére
Tárolt eljárás végén insertálok, a gond az, hogy többször is bekerült ugyanaz a sor a táblába, és ez összezavarja egy másik eszköz működését. Most ezzel próbálkozom de hibát dob.
Felveszek egy flaget, kezdetben beállítom nullára, majd lekérdezem, hogy a beszúrni kívánt táblában van-e már ilyen sor, ha van, akkor flag 1 lesz, és ez alapján insert, vagy sem.
Így néz ki kód szintjén:
DECLARE flag INT;
SET flag = 0;
...
...
SELECT 1 FROM tabla WHERE datum = multhet INTO flag;
CASE flag
WHEN 0 THEN (INSERT INTO tabla (datum, ertek) VALUES (multhet,myertek));
ELSE (SELECT 'row already in table');
END CASE;Sajnos erre ezt a hibát dobja:
Script line: 4 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO tabla (datum, ertek) VALUES (multhet,myertek));
' at line 120Szerintem így case-en belülre nem lehet insertet rakni, mert sima selectet sikerült.
fordfairlane: a tábla ahova beszúrok egy 3 oszlopos tábla, id, datum, ertek
az id auto increment, és ez a kulcs.
Én tényleg csak azt szeretném elérni, hogy pl van egy ilyen sorom a táblában:22 2013-37 99.9999
akkor ne tudjak egy olyan sort beszúrni, ahol datum = 2013-37
-
Jim-Y
veterán
sziasztok, hogy tudok úgy insertet írni, hogy ha már szerepel ez a sor a táblában akkor ne szúrja be? üdv
ezzel próbálkoztam, de nem jó, beszúr egy újabb sort, nyílván más id-vel, de a többi ugyanaz:S
Példa:
INSERT INTO TABLA (DATUM, ERTEK) VALUES (multhet,ertek1) ON DUPLICATE KEY UPDATE DATUM = DATUM; -
Jim-Y
veterán
válasz
Apollo17hu #1442 üzenetére
Közben úgy próbálkozom, hogy
left outer joinnal hozzákötöttem a ranges (t2) táblát, majd megírom az eredményt, de cca 45 perc míg lefut a procedureSELECT
R.range_id
,R.range_from
,R.range_to
,IFNULL(S.numbers,0) as numbers
FROM t2 R LEFT OUTER JOIN
(SELECT
...
FROM t1, t2) S ON S.range_id = R.range_id; -
Jim-Y
veterán
sziasztok, mivel nem működik az sqlfiddle jelenleg, ezért a példa sémát belinkelem ide:
create table t1(
number INT PRIMARY KEY
);
insert into t1 values(150);
insert into t1 values(250);
insert into t1 values(350);
insert into t1 values(450);
insert into t1 values(1150);
insert into t1 values(3050);
insert into t1 values(3100);
create table t2(
range_id INT AUTO_INCREMENT PRIMARY KEY,
range_from INT,
range_to INT
);
insert into t2(range_from, range_to) values(0,999);
insert into t2(range_from, range_to) values(1000,1999);
insert into t2(range_from, range_to) values(2000,2999);
insert into t2(range_from, range_to) values(3000,3999);Jelenleg azt csinálom, hogy
SELECT
B.range_id
,B.range_from
,B.range_to
,COUNT(1)
FROM t1 A, t2 B
WHERE
A.number >= B.range_from AND
A.number <= B.range_to
GROUP BY B.range_id;Ez azt csinálja, hogy a t2-ben lévő rangekhez megszámolja, hogy hány t1-beli szám tartozik. A példánál maradva
id | range_from | range_to | count(1)
1 0 999 4
2 1000 1999 13 2000 2999 0
4 3000 3999 2Valami ilyesmit kéne kapni. A gondom az, hogy azok a sorok, ahol a count(1) nulla lenne, nem jelennek meg az eredményben. Hogy kéne módosítanom az összegzés, hogy azok a rangek is szerepeljenek, amiben 0 szám van? üdv
-
Jim-Y
veterán
válasz
Apollo17hu #1395 üzenetére
Szia, igen jól működik köszönöm
http://sqlfiddle.com/#!2/588bd6/14
-
Jim-Y
veterán
válasz
Sk8erPeter #1393 üzenetére
Még nem tudtam kipróbálni a kapott választ ezért nem válaszoltam, majd jövő héten.
Azok a tartományok, amik bővebbek, és amikből kevesebb van, azokat csv fájlokban kapok(unk) meg, és azt is egy ETL eszközzel töltjük be az adatbázisba. Időnként frissül. Az a tábla, ahol ezresek a felbontások, azt már én hoztam létre, mert az elvárás az, hogy ezres legyen a felbontás, ne pedig változó.
Az a feladat, hogy abban a táblában, ahol a bővebb felbontások vannak, 1-1 ilyen felbontásra meg van határozva valami, a példa kedvéért legyen az, hogy 'Fontos', 'Nem fontos'
Na, kipróbáltam az SQLFiddle-t, jó cucc, nem hallottam még róla
http://sqlfiddle.com/#!2/588bd6/3
És akkor talán így már világos a feladat is. T2 'range_jelolo' oszlopát szeretném feltölteni T1 'Jelolo' oszlopa alapján.
-
Jim-Y
veterán
sziasztok
Egy olyan problémába ütköztem, hogy van két táblám, mindkét táblában van két oszlop ami egy-egy tartományt jelöl ki
Példa:
Tábla 1:
Col1 Col2
1000 1999
2000 2999
3000 3999
...Tábla 2:
Col1 Col2
1000 5999
9000 17999
53000 120999
123000 124999
....Tábla1 a több soros, mivel itt ezresével vannak felbontva a tartományok (Range-ek)
Tábla2 kevesebb soros, ebben különböző méretű tartományok vannak.Tábla1-be, vagy egy új tábláva szeretnék bevezetni egy olyan oszlopot, hogy ha Tábla 1 tartománya beleesik Tábla 2 valamely tartományába, akkor az oszlop értéke legyen mondjuk true, ha nem akkor false.
Nem tudom, hogy érthető-e, a lényeg, hogy pl 1000 - 1999 beleesik-e Tábla 2 valameny tartományába (pl 9000 17999), ha belesik, akkor Tábla1 azon sorában ahol a tartomány van felvennék egy új oszlopot.
Remélem tudtok segíteni.
Jelenleg az a gond, hogy descart szorzattal fűzöm össze a két táblát, ilyenkor ugye végigiterál az össze soron.
Pl 1000-1999 tegyük fel beleesik Tábla 2 legelső tartományába, akkor nekem itt meg kéne állnom, és menni a következő sorra, mert most még végigmegy a többi soron, és ott nyílván már nem fog belesni a range-be így helytelen eredményt kapok :S
-
Jim-Y
veterán
Sziasztok.
Egy ETL eszközzel töltök egy már meglévő táblához új adatokat úgy, hogy az eredeti táblát ki kellett egészítenem 2 új oszloppal, mert az új betöltésben már van két plusz oszlop.
Először ALTER tablellel hozzáadtam a kívánt két új oszlopot NULL default value-val, majd betöltöttem az adatokat.
Az eredmény az lett, hogy a régi táblában az új oszlopoknál null érték szerepel, az új soroknál pedig jó értékek. Igen ám, de ha lefuttatok egy lekérdezést, akkor ezek az új adatok is 'átállítódnak' null értékre.Kérlek ne nézzetek hülyének, én sem értem, hogy ha lefuttatom a selectet betöltés után akkor a jó értékek szerepelnek, ha írok a táblára egy query-t, lefuttatom (nem lesz jó az eredmény), majd lefuttatom megint a select * -ot akkor már nem jó értékek vannak benne, hanem csupa NULL.
Találkozott már valaki ilyennel?
-
Jim-Y
veterán
válasz
Sk8erPeter #1374 üzenetére
Végül tárolt eljárás lett belőle. Azért megosztom hátha valamire még használni lehet
DELIMITER $$
DROP PROCEDURE IF EXISTS `ranges` $$
CREATE DEFINER=`user`@`%` PROCEDURE `ranges`()
BEGIN
DECLARE v1 INT DEFAULT 2000000;
WHILE v1 < 9999999 DO
INSERT INTO test_table(range_from, range_to) VALUES (v1, v1+999);
SET v1 = v1 + 1000;
END WHILE;
END $$
DELIMITER ; -
Jim-Y
veterán
Sziasztok!
Lenne egy olyan feladatom, hogy egy tartományt kéne feldarabolnom 1000-es szeletekre.
Példa:
from | to
2000 2999
3000 3999
5000 5999
stb...Ugye ez eddig egyszerű, ciklus, a ciklusváltozó 999-el növekszik, onnantól pedig megvan.
A kérdésem az lenne, hogy van-e erre valami szebb megoldás, illetve miben kéne ezt megcsinálnom? Tárolt eljárás, valamilyen ETL eszköz?
köszi
-
Jim-Y
veterán
válasz
fordfairlane #1332 üzenetére
Igazából csak érdekelt, hogy meg lehet-e oldani egy queryben
-
Jim-Y
veterán
Végül nagyjából így csináltam meg
SELECT
date,
COUNT(*) as Osszes,
COUNT(IF(valami < 72,valami,null)) as below72hours,
COUNT(IF(valami > 72,valami,null)) as above72hours
FROM TABLE
GROUP BY date;biztos nem a legszebb, de működik. Az eredeti kérdés arra irányult volna, hogy ha az above72hours-ot csak az Osszes és below72hours alapján akartam volna számolni ebben az egy queryben, akkor azt hogy kellett volna.
-
Jim-Y
veterán
Sziasztok, nem lehet olyat csinálni MySQL-ben, hogy van egy selectem, számol egy count(*)-ot valamin, illetve egy filterezett értéket.
Tehát a query eredményében lesz egy count(*) mondjuk 50, és egy filterezett oszlop, ami ugye < mint a count, legyen ez mondjuk 30.
Én az resultsetben szeretnék egy olyan oszlopot, ahol ezek különbsége is látszik, tehát COUNT(*) - Filtered.
Ezt úgy próbáltam, hogy felvettem egy akármilyen mezőt a selectben, pl 'good', majd a HAVING után próbáltam ennek értékül adni a fenti kivonás eredményét.Jó, noob kérdés tudom
-
Jim-Y
veterán
Sziasztok. Adott a következő szituáció:
van egy tábla, ahol vannak bizonyos tulajdonságú rekordjaim, mondjuk legyen egy NUM nevű oszlop.
Szeretnék ezen csinálni egy olyan lekérdezést, hogy minden olyan sort szedjen ki, ahol NUM = 1, rendezze egy másik oszlop szerinti csökkenő sorrendbe, ÉS! (itt a probléma) csak az első 10%-ot listázza.Pl NUM = 1 sorból van 2000 db, ezeket rendezem egy másik mező szerint csökkenőbe, de ezekből csak 2000*0.1 darabot szeretnék listázni.
Ott akadtam el, hogy ha a LIMIT után egy változót teszek, akkor szintaktikai hibát dob. Hogy lehetne ezt megoldani id-kel való lavírozás nélkül? üdv
Új hozzászólás Aktív témák
Hirdetés
- BESZÁMÍTÁS! Intel Core i7 8700K 6 mag 12 szál processzor garanciával hibátlan működéssel
- Telefon felvásárlás!! Apple Watch Series 9/Apple Watch Ultra/Apple Watch Ultra 2
- BESZÁMÍTÁS! Sony PlayStation4 PRO 1TB fekete konzol extra játékokkal garanciával hibátlan működéssel
- Azonnali készpénzes INTEL CPU NVIDIA VGA számítógép felvásárlás személyesen / postával korrekt áron
- Telefon felvásárlás!! Samsung Galaxy A50/Samsung Galaxy A51/Samsung Galaxy A52/Samsung Galaxy A53
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest