phpbar.de logo

Mailinglisten-Archive

Re: SQL-Syntax
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: SQL-Syntax



Sven Letzel schrieb am Mittwoch, den 14. Juli 1999:
> Wahrscheinlich muß man hier geschickt einen SELF-JOIN einsetzen, aber wegen
> des "group by" bin ich noch zu keinem brauchbaren Ergebnis gekommen.

Hier eine Lösung, die Du sicher nicht verwenden willst: ;-)

SELECT
  SUBSTRING_INDEX(SUBSTRING_INDEX( MAX(CONCAT(f2,'.',t1.id,'.',f3)) ,'.',-2),'.',1) AS id
 ,f1
 ,SUBSTRING_INDEX( MAX(CONCAT(f2,'.',t1.id,'.',f3)) ,'.', 1) AS f2
 ,SUBSTRING_INDEX( MAX(CONCAT(f2,'.',t1.id,'.',f3)) ,'.',-1) AS f3
FROM
  TABLE1 AS t1
 ,TABLE2 AS t2
WHERE
  t1.id = t2.id
GROUP BY
  f1
;

Der Trick ist hier also ein wörtlich genommenes Anhängen der anderen
Felder ... :)

Da es noch keine Sub-Selects gibt, geht's in MySQL meines Wissens
nicht schöner, wenn man unbedingt bei _einer_ SQL-Anfrage bleiben
will.

Ansonsten muß man mit temporären Tabellen arbeiten:

CREATE TABLE temp ( f1 INT, f2max INT );
INSERT INTO temp
  SELECT f1, MAX(f2) FROM TABLE1 GROUP BY f1;
SELECT t1.id, t1.f1, t1.f2, t2.f3
  FROM  TABLE1 AS t1, TABLE2 AS t2, temp
  WHERE t1.f1 = temp.f1
    AND t1.f2 = temp.f2max
    AND t1.id = t2.id;
DROP TABLE temp;

Und wenn Dir wegen der Datenkonsistenz unwohl ist (es könnte sich ja
theoretisch zwischen dem INSERT und dem SELECT etwas an den Daten
ändern), dann verwende noch zusätzlich Lese- und Schreibsperren:

CREATE TABLE temp ( f1 INT, f2max INT );
LOCK TABLES TABLE1 AS t1 READ,
            TABLE2 AS t2 READ,
            temp WRITE;
INSERT INTO temp
  SELECT f1, MAX(f2) FROM TABLE1 AS t1 GROUP BY f1;
SELECT t1.id, t1.f1, t1.f2, t2.f3
  FROM  TABLE1 AS t1, TABLE2 AS t2, temp
  WHERE t1.f1 = temp.f1
    AND t1.f2 = temp.f2max
    AND t1.id = t2.id;
UNLOCK TABLES;
DROP TABLE temp;

Ciao,
  Martin
-- 
Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://home.pages.de/~ramsch/ >
PGP KeyID=0xE8EF4F75 FiPr=52 44 5E F3 B0 B1 38 26  E4 EC 80 58 7B 31 3A D7

---
*** Abmelden von dieser Mailingliste funktioniert per E-Mail
*** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive