Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3666[/thread]

MySQL: Wie temporäre Tabelle erzeugen: da Unterabfrage nicht geht



<< >> 8 Einträge, 1 Seite
nepos
 2006-03-21 14:42
#34131 #34131
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ne temporaere Tabelle legst du mittels
Code: (dl )
CREATE TEMPORARY TABLE ...
an (also im Prinzip wie ne normale Tabelle). Sie bleibt solange bestehen, solange deine Datenbankverbindung offen ist. Beim Schliessen dieser wird auch die temporaere Tabelle wieder geloescht. Ab Version 4.0.2 brauchst du dazu auch noch das Recht, temporaere Tabellen anlegen zu duerfen.
Befuellen kannst du die Tabelle dann mit
Code: (dl )
INSERT INTO <temp_table_name> SELECT ...
pq
 2006-03-21 15:17
#34132 #34132
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
verschoben (CGI -> Datenbanken)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
MartinR
 2006-03-21 14:25
#34133 #34133
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe mir in Access eine Abfragestruktur zurechtgelegt. In dieser wird aber über einen Left Join eine Unterabfrage verknüpft.

Nun gehen Unterabfragen in MySQL (bei mir 4.1.10a) ja angeblich nicht.

Ich bin auf temporäre Tabellen gestossen. Nur wie lege ich so eine an? Die Temporäre Tabelle wird nur während der Laufzeit meines Scriptes einmal benötigt.

Im MySQL-Handbuch habe ich immer nur gelesen wie temp Tabellen verwendet werden, aber nicht wie eine angelegt wird und mit Daten gefüllt.


Nur falls es interessiert hier der Access-Code:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Hauptabfrage:

SELECT
Personal.pers_id,
Personal.pers_name,
Personal.pers_vorname,
Hilfsabfrage.sortier_kriterium
FROM
Personal LEFT JOIN Hilfsabfrage ON
Personal.pers_id = Hilfsabfrage.pers_id
WHERE
Personal.pers_struktur_id = 132 AND
Personal.pers_aktiv = 1
ORDER BY
Hilfsabfrage.sortier_kriterium,
Personal.pers_name,
Personal.pers_vorname



Hilfsabfrage:

SELECT
pers_id
FROM
sortierung
WHERE
sortierer_id = 1912 AND
sortier_anwendung = 284
ORDER BY
sortier_kriterium
pq
 2006-03-21 15:16
#34134 #34134
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=MartinR,21.03.2006, 13:25]Nun gehen Unterabfragen in MySQL (bei mir 4.1.10a) ja angeblich nicht.[/quote]
laut http://dev.mysql.com/tech-resources/features.html schon...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
MartinR
 2006-03-21 15:33
#34135 #34135
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
[quote=pq,21.03.2006, 14:16][quote=MartinR,21.03.2006, 13:25]Nun gehen Unterabfragen in MySQL (bei mir 4.1.10a) ja angeblich nicht.[/quote]
laut http://dev.mysql.com/tech-resources/features.html schon...[/quote]
Hi, danke schon mal.

Hier steht aber folgendes:

Quote
In MySQL (was noch keine Unterabfragen hat) führen Sie das in zwei Schritten durch


Ich habe zwar auch Beispiele mit "Unterabfragen" gefunden aber immer nur in der Art .. where wert = Ergebnis_einer_Abfrage ...

Aber nirgends wie eine ganze, durch eine Unterabfrage erzeugte (temporäre) Tabelle als join verknüpft wird.

Sorry für's falsche Forum
nepos
 2006-03-21 16:12
#34136 #34136
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also, wenn MySQL in deiner Version Subselects kann, dann kannst du deinen Select auch so schreiben ohne die temporaere Tabelle:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SELECT
   Personal.pers_id,
   Personal.pers_name,
   Personal.pers_vorname,
   Hilfsabfrage.sortier_kriterium
FROM
   Personal LEFT JOIN (
     SELECT
        pers_id
     FROM
        sortierung
     WHERE
        sortierer_id = 1912 AND
        sortier_anwendung = 284
     ORDER BY
        sortier_kriterium
   ) AS Hilfsabfrage
     ON
        Personal.pers_id = Hilfsabfrage.pers_id
WHERE
   Personal.pers_struktur_id = 132 AND
   Personal.pers_aktiv = 1
ORDER BY
   Hilfsabfrage.sortier_kriterium,
   Personal.pers_name,
   Personal.pers_vorname

Natuerlich ungetestet, aber in der Art und Weise sollte es dann funktionieren.
pq
 2006-03-21 16:33
#34137 #34137
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=MartinR,21.03.2006, 14:33]<a href="http://dev.mysql.com/doc/refman/4.0/de/example-max..." target="_blank">Hier</a> steht aber folgendes:

Quote
In MySQL (was noch keine Unterabfragen hat) führen Sie das in zwei Schritten durch
[/quote]
naja, das ist die doku für 4.0. du sagtest doch, du hättest 4.1.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
MartinR
 2006-03-22 10:48
#34138 #34138
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
[quote=pq,21.03.2006, 15:33]naja, das ist die doku für 4.0. du sagtest doch, du hättest 4.1.[/quote]
Hi,

die Doku gilt (sowie ich das verstehe) bis 4.1.18:

Quote
This is the MySQL Reference Manual. It documents MySQL 3.23 through MySQL 4.1.18.


Das mit der Unterabfrage im SQL-Statement funzt leider nicht. Aber mit einer temporären Tabelle habe ich das Problem nun gelöst.

Danke.
<< >> 8 Einträge, 1 Seite



View all threads created 2006-03-21 14:42.