ugrás a tartalomhoz

MySql duplikált sorokból csak egyet

firith · 2007. Aug. 16. (Cs), 16.04
üdv!

Az lenne a kérdésem, hogy lehetne a legszebben megoldani azt, hogy az adatbázisban egyező sorokból(ez egyezőség két oszlop függvényében dől el) csak az egyik jelenjen meg.

például van egy táblám:
id, kulcs1, kulcs2, szam

Szeretném lekérni az összes sort, de a duplikált sorokból csak azt, amelyikben a `szam` mezőben a legnagyobb szám van

Ehhez kérek segítséget!
 
1

group by, max

TeeCee · 2007. Aug. 16. (Cs), 17.00
Csak a teszt kedvéért:

-- 
-- Tábla szerkezet: `test`
-- 

CREATE TABLE `test` (
  `id` smallint(6) NOT NULL,
  `kulcs1` smallint(6) NOT NULL,
  `kulcs2` smallint(6) NOT NULL,
  `szam` smallint(6) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- 
-- Tábla adatok: `test`
-- 

INSERT INTO `test` VALUES (1, 12, 24, 100);
INSERT INTO `test` VALUES (2, 12, 24, 101);
INSERT INTO `test` VALUES (3, 13, 25, 102);  
Na, ezen az alábbi lekérdezést futtatva:

SELECT * , MAX( szam ) AS groupMax
FROM `test`
GROUP BY kulcs1, kulcs2
Ez jött:

id	kulcs1	kulcs2	szam	groupMax
3 	13 		25 			102 	102
1 	12 		24 			100 	101
Nekem jónak tűnik...
2

nem aggregált mező

Hodicska Gergely · 2007. Aug. 17. (P), 00.11
Nekem jónak tűnik...
Nekem nem. ;) SQL szabvány, hogy a group by kluyulában nem szereplő mezők a select listában csak aggregáló függvények argumentumaként szerepelhetnek. Ha átgondolod, akkor ez tök logikus is. A group by több sort fog össze, melyek között a nem a group by-ben használtak értéke eltér egymástól: ezek közül melyiket adja vissza a DB kezelő? A MySQL persze dönt maga, egy rendes DB kezelő ilyenkor hibát ad (MySQL-nek is van szabványkövető üzemmódja).


Üdv,
Felhő
3

ok,

TeeCee · 2007. Aug. 28. (K), 09.16
de akkor mi a megoldás? Subselect?

Amúgy a MySQL-ben szabványkövető üzemmódot hol lehet bekapcs?

Üdv: TeeCee :o)